Java,OpenCV VideoWriter isOpened returns 始终为 false
Java, OpenCV VideoWriter isOpened returns always false
我也在使用 Java OpenJdk 14.0.2 和 OpenCV-440,而在 Windows 10 上一切都是 运行。我的 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() returns true,对于带有“.avi”的相同代码,它 returns 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);
is similar problem and also opencv documentation 对于 VideoWriter
我也在使用 Java OpenJdk 14.0.2 和 OpenCV-440,而在 Windows 10 上一切都是 运行。我的 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() returns true,对于带有“.avi”的相同代码,它 returns 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);