当我在函数中使用时: 'x'.write(frame) for write to video file in opencv 程序通过代码,我编译它没有错误,但是当我打开文件时,我看到它是 0 kb 并且播放器可以'玩它。
有人能帮我吗?

这是我的代码:

    // Setup output video
    cv::VideoWriter output_cap("output.avi",
        CV_CAP_PROP_FOURCC,
        CV_CAP_PROP_FPS,
        cv::Size(1376, 768));


    // Loop to read frames from the image and write it to the output capture
    cv::Mat frame = imread("1.jpg", 0);
    for(int hgf=1;hgf<=300;hgf++)
    {

        if (!frame.data)
        {
            break;
        }

            output_cap.write(frame);

    }

大家好!

最佳答案

我认为主要问题是您的代码将错误的 FOURCC 值传递给 VideoWriterCV_CAP_PROP_FOURCC (#defined as 6) 用于为 FOURCC 属性命名,但它不是一个正确的值。 CV_CAP_PROP_FPS 类似(#defined 为 5),但这里的效果只是告诉 VideoWriter 使用 5.0 fps。

这对我有用:

#include <stdio.h>
#include <opencv2/opencv.hpp>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    if ( argc != 2 ) {
        cout << "image required" << endl;
        return -1;
    }
    Mat frame = imread(argv[1], 1);

    VideoWriter output_cap("output.avi", CV_FOURCC('M','J','P','G'), 15,
        frame.size());

    for(int hgf=1; hgf<=300; hgf++) {
        output_cap.write(frame);
    }

    return 0;
}

注意:在 Linux 上,根据我的经验,VideoWriter 对视频格式的支持一般。对于两种广泛使用的格式 M-JPEG(上面使用的)和 H.264,M-JPEG 适用于 OpenCV 2.4,但不适用于 3.X 和 H.264,与 question 对于 2.4 和 3 的失败方式相同。 X。

关于c++ - 为什么函数 'x' .write(frame) 对我不起作用?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38921918/

10-10 21:23