如何解决Java,OpenCV VideoWriter isOpened始终返回false
在Windows 10上运行所有程序时,我也使用Java OpenJdk 14.0.2和OpenCV-440。我的JavaFX应用程序应该捕获网络摄像头(或任何其他视频设备)的帧并将其存储为视频文件,例如avi。
这是我的代码:
public void run() {
Mat frame = new Mat();
VideoCapture videoCapture = new VideoCapture(0);
videoCapture.read(frame);
Size frameSize = new Size((int) videoCapture.get(Videoio.CAP_PROP_FRAME_WIDTH),(int) videoCapture.get(Videoio.CAP_PROP_FRAME_HEIGHT));
int fourcc = VideoWriter.fourcc('x','2','6','4');
VideoWriter writer = new VideoWriter();
//if myuniquefile%02d.jpg is using any kind of video extension instead,it is not working (e.g. avi)
writer.open("images/myuniquefile%02d.jpg",fourcc,videoCapture.get(Videoio.CAP_PROP_FPS),frameSize,true);
while (isRunning) {
if (videoCapture.read(frame)) {
writer.write(frame);
}
}
videoCapture.release();
writer.release();
}
此代码可以正常工作,但是一旦我将“ .jpg”更改为.avi扩展名,它就不再起作用。对于上面的VideoWriter.isOpened()代码返回true,对于带有“ .avi”的代码返回false。我尝试了很多文件扩展名和编解码器(VideoWriter.fourcc)的组合,但它从未打开过。
让我们继续进行设置,我正在使用Intellij(2020.1.2),并且openCV 440通过以下方式链接:
唯一的附加库是javafx-sdk-14.0.2.1
我最初是使用这个example的,但是对于我来说从来没有那样。 我非常感谢您的任何建议
BR迈克尔
解决方法
因为您正在创建H264
编解码器VideoWriter
,但尝试获取.avi
编解码器视频。
这是.avi或.mp4的正确编解码器格式:
int fourcc = VideoWriter.fourcc('M','J','P','G');
writer.open("images/out.avi",fourcc,videoCapture.get(Videoio.CAP_PROP_FPS),frameSize,true);
Here是类似的问题,也是VideoWriter的opencv documentation
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。