OpenCV的VideoWriter无法打开文件。

3
以下代码无法打开VideoWriter对象:
#include <iostream>

#include <opencv2/core/core.hpp>
#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/highgui/highgui.hpp>

using namespace cv;
using namespace std;

int main() {
    VideoWriter oVideo;
    oVideo.open ("381.avi", -1, 30, Size(640,480), true);
    if (!oVideo.isOpened()) {
        cout  << "Could not open the output video for write" << endl;
        return -1;
    }

    return 0;
}

我正在Ubuntu 12.04上使用Code::Blocks预构建的OpenCV 2.4.9。我已经使用imwrite()在同一位置写入了多张图片,没有出现问题,所以我不认为这与权限有关。我还尝试过CV_FOURCC('X','V','I','D'),但没有成功。

我错过了什么吗?

非常感谢任何帮助。


不要使用-1,尝试传递参数CV_FOURCC('M','J','P','J')。或者('M','P','E','G')。XVID可能不是您系统中存在的编解码器。 - a-Jays
它是否给你任何错误提示,还是只是说“无法打开输出视频进行写入”?我直接复制了你的代码,只将文件名更改为我拥有的视频,它完美地运行了。你试图实现的最终目标是什么? - Maggick
它编译并运行没有任何错误,我只得到输出“无法打开输出视频进行写入”。最终我想将一些帧写入视频,但由于我的代码已经在创建VideoWriter对象的第一步失败,所以我将其转化为一个最小、完整和可验证的示例。 - BdB
1
@BdB... 对于 fourcc,Windows 支持值为 -1CV_FOURCC_PROMPT。在其他平台上,您必须指定一个 fourcc 值。 - sgarizvi
尝试使用CV_FOURCC_DEFAULTCV_FOURCC('I','Y','U','V'),它们是Linux默认值。 - sgarizvi
显示剩余2条评论
3个回答

1

0

确保你的电脑上安装了特定的编解码器。


3
默认编解码器(xvid、mjpj、mpeg、iyuv)和无压缩(0或CV_FOURCC_DEFAULT)似乎无法正常工作,因此我怀疑这不是编解码器问题。要确定,我该如何查找已安装在系统上的编解码器? - BdB

0

对于在Windows中遇到类似问题的任何人,仅供参考,在OpenCV 4.6中预构建的opencv_world460.lib似乎不支持API之外的视频编解码器,我发现需要在安装ffmpeg后重新构建和链接opencv\build\lib\Release文件夹中的所有单独库。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接