【问题标题】:OpenCV VideoWriter size issueOpenCV VideoWriter 大小问题
【发布时间】:2017-04-12 09:48:23
【问题描述】:

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

    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 个频道(我用 .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 上方便地裁剪视频文件的软件的建议。这也将解决问题。我会裁剪视频并输入它们。

有什么想法吗?

【问题讨论】:

  • 你能打印 Size(captureRGB.get(CV_CAP_PROP_FRAME_WIDTH), captureRGB.get(CV_CAP_PROP_FRAME_HEIGHT)) 和你的实际图像尺寸吗?

标签: c++ opencv


【解决方案1】:

也许我来晚了。但是这个解决方案对我有用。 调整Mat 的大小,使用cv::resize(finalOutputRGB,finalOutputRGB, cv::size(width, height*3))**使用图像高度*3 作为高度。 ** 而已。它解决了我的问题。希望这会有所帮助。

【讨论】:

  • 您的解决方案适用于黑白或灰度图像吗?
【解决方案2】:

例外情况是您要写入的图像帧的大小与视频编写器中的大小不同。您应该检查您正在编写的每个图像帧是否具有与视频编写器相同的宽度/高度。

【讨论】:

    【解决方案3】:

    只是在黑暗中拍摄:从错误中,既然您确定您有 3 个通道,您是否有可能反转宽度和高度?在 OpenCV 中,Size 定义为(width, height),而Mat 定义为(rows, cols),实际上对应于(height, width)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-05
      • 2022-10-12
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多