c - 在 OpenCV 中编写 AVI 文件

标签 c video opencv avi

Learn OpenCv,Orielly 中给出了网上的示例和代码。

经过多次尝试,out.avi 文件被写入 0 字节。 我想知道我哪里出错了。

以下是我使用的代码...

int main(int argc, char* argv[]) {
    CvCapture* input = cvCaptureFromFile(argv[1]);
    IplImage* image = cvRetrieveFrame(input);

    if (!image) {
        printf("Unable to read input");
        return 0;
    }


    CvSize imgSize;
    imgSize.width = image->width;
    imgSize.height = image->height;



    double fps = cvGetCaptureProperty(
            input,
            CV_CAP_PROP_FPS
            );

    CvVideoWriter *writer = cvCreateVideoWriter(
            "out.avi",
            CV_FOURCC('M', 'J', 'P', 'G'),
            fps,
            imgSize
            );


    IplImage* colourImage;
    //Keep processing frames...
    for (;;) {

        //Get a frame from the input video.
        colourImage = cvQueryFrame(input);
        cvWriteFrame(writer, colourImage);

    }

    cvReleaseVideoWriter(&writer);
    cvReleaseCapture(&input);

}

最佳答案

我敢打赌 cvCreateVideoWriter 会返回 NULL。只是逐步通过它,看看它是不是真的。在那种情况下,问题可能出在 CV_FOURCC(..) 上,它找不到编解码器并强制返回 0;

您可以尝试使用 -1 而不是 CV_FOURCC。在运行时会提示您选择合适的编解码器

关于c - 在 OpenCV 中编写 AVI 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/368967/

相关文章:

c - 从函数获取结构输入

android - 如何向 Android 添加新的视频编解码器?

opencv - 使用 OpenCV 编码多层信息

opencv - 演示需要 OpenCV 用于网络摄像头图像

c - 管理日志文件大小

c - scanf() 不接受输入

c - 从文本文件扫描

c# - 如何使用 DirectShow 过滤器将图像序列转换为视频?

javascript - 使用 toggleClass 暂停/播放 YouTube 视频 API

java - 使用 OpenCV 中的 Blob 检测进行皮肤毛孔分析