c++ - OpenCV VideoWriter 大小问题

标签 c++ opencv

我正在尝试读取视频文件,对其进行处理,然后将处理后的帧写入输出视频文件。但是,我收到以下错误:

    OpenCV Error: Assertion failed (img.cols == width && img.rows == height && channels == 3) in write, file /.../opencv-cpp/modules/videoio/src/cap_mjpeg_encoder.cpp, line 829
    terminate called after throwing an instance of 'cv::Exception'
      what():  /.../opencv-cpp/modules/videoio/src/cap_mjpeg_encoder.cpp:829: error: (-215) img.cols == width && img.rows == height && channels == 3 in function write

我确定在 write() 函数发生之前我有 3 个 channel (我用 .channels() 检查过):

//generate video
cout<<finalOutputRGB.channels()<<endl;
outputCapRGB.write(finalOutputRGB);

所以问题不在这里。也许是我初始化的方式?

// Setup output videos
VideoWriter outputCapRGB(rgbVideoOutputPath, captureRGB.get(CV_CAP_PROP_FOURCC), captureRGB.get(CV_CAP_PROP_FPS),
Size(captureRGB.get(CV_CAP_PROP_FRAME_WIDTH), captureRGB.get(CV_CAP_PROP_FRAME_HEIGHT)));

它会是什么?我想到的一件事是,在处理帧的过程中,它们被裁剪了,所以分辨率不一样。也许这就是原因。但话又说回来,如果 OpenCV 不允许记录任何修改过的视频,那将是愚蠢的。

因此,我尝试使用裁剪后的帧尺寸创建 videowriter 对象,如下所示:

// Sizes of the videos to be written (after the processing)
Size irFrameSize = Size(449, 585);
Size rgbFrameSize = Size(488, 694);

// Setup output videos
VideoWriter outputCapRGB(rgbVideoOutputPath, captureRGB.get(CV_CAP_PROP_FOURCC), captureRGB.get(CV_CAP_PROP_FPS), rgbFrameSize);
VideoWriter outputCapIR(irVideoOutputPath, captureIR.get(CV_CAP_PROP_FOURCC), captureIR.get(CV_CAP_PROP_FPS), irFrameSize);

但是,我仍然遇到同样该死的错误。

或者,我也感谢任何可以在 Ubuntu 上方便地裁剪视频文件的软件的建议。这也可以解决问题。我会裁剪视频并将它们输入。

有什么想法吗?

最佳答案

异常表示您要写入的图像帧的大小与视频编写器中的大小不同。您应该检查您正在编写的每个图像帧的宽度/高度是否与您的视频编辑器中的相同。

关于c++ - OpenCV VideoWriter 大小问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40848254/

相关文章:

c++ - 我们如何突出显示以 ICON 格式创建的 ClistCtrl 的第一项?

python - 查找图像中的第一个非零值

c++ - OpenCV 检测点是否位于线/平面上

opencv - CvType.CV_8UC4 的目的是什么

c++ - 调试断言失败的 Opencv 函数

C++将图像放在特定位置的另一个图像之上

c++ - 捕获隐藏桌面的屏幕截图

python - 使用某些 OpenCV 函数时出现段错误

c++ - 可用空间大小信息

c++ - 使用 zmq 进行多线程发布