当一切都在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是通过以下方式链接的:
java - Java,OpenCV VideoWriter isOpened始终返回false-LMLPHP
唯一的附加库是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

关于java - Java,OpenCV VideoWriter isOpened始终返回false,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/63392771/

10-14 10:38