OpenCV的VideoWriter不会写任何东西,虽然cvWriteToAVI做(OpenCV V

2019-06-27 05:34发布

我一直试图从凸轮捕捉视频,并将其写入到一个AVI文件。 我使用Qt 4.8.2与MSVC 2010(86)在Windows 7上我有2个版本的代码:一个用CV ::垫,另一个使用的IplImage *。 然而,只有IplImage结构*版本工作。 下面是使用CV我的代码::垫:

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

using namespace cv;

int main() {
    VideoCapture* capture2 = new VideoCapture( CV_CAP_DSHOW );
    Size size2 = Size(640,480);
    int codec = CV_FOURCC('M', 'J', 'P', 'G');
    VideoWriter* writer2 = new VideoWriter("video.avi",codec,15,size2);

    int a = 100;
    Mat frame2;
    while ( a > 0 ) {
        capture2->read(frame2);
        writer2->write(frame2);
        a--;
    }

    writer2->release();
    capture2->release();
    return 0;
}

下面是使用的IplImage *的代码:

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

int main() {
    CvCapture* capture = cvCaptureFromCAM( CV_CAP_DSHOW );
    CvSize size = cvSize(640,480);
    int codec = CV_FOURCC('M', 'J', 'P', 'G');
    CvVideoWriter* writer = cvCreateVideoWriter("video.avi",codec,15,size);

    int a = 100;
    while ( a > 0 ) {
        IplImage* frame = cvQueryFrame( capture );
        cvWriteToAVI(writer,frame);
        a--;
    }

    cvReleaseVideoWriter(&writer);
    cvReleaseCapture( &capture );
    return 0;
}

它基本上是相同的,或至少它看起来一样的东西给我。 它读取100帧,并应其写入“video.avi”。 它编译和运行没有出错,但CV ::垫版本不写什么,而*的IplImage版本完美的作品。

是否有人有什么回事任何想法?

Answer 1:

在OpenCV中C ++引用的语法是有点不同的,这里是在C工作代码++。 我只是说imshow和waitkey,检查如果你愿意,你可以删除它们。

int main()
{
    VideoCapture* capture2 = new VideoCapture(CV_CAP_DSHOW);
    Size size2 = Size(640, 480);
    int codec = CV_FOURCC('M', 'J', 'P', 'G');
    // Unlike in C, here we use an object of the class VideoWriter//
    VideoWriter writer2("video_.avi", codec, 15.0, size2, true);

    writer2.open("video_.avi", codec, 15.0, size2, true);
    if (writer2.isOpened())
    {
        int a = 100;
        Mat frame2;
        while (a > 0)
        {
            capture2->read(frame2);
            imshow("live", frame2);
            waitKey(100);
            writer2.write(frame2);
            a--;
        }
    }
    else
    {
        cout << "ERROR while opening" << endl;
    }

    // No Need to release the Writer as the distructor will called automatically
    capture2->release();

    return 0;
}


Answer 2:

我一遍又一遍地有同样的问题,并没有我在网上找到帮助的解决方案。

奇怪的是,这个问题(用试错法纯粹是确定的)与写权限。 一切后,我曾sudo chmod u+rwx的Python脚本。



Answer 3:

我有同样的问题,过一段时间后,我意识到,输入视频是不一样的尺寸与输出。 调整输入视频可以帮助ü。

 capture2->read(frame2);
 cv::resize(frame2,frame2,cv::Size(640,480);
 writer2->write(frame2);


文章来源: OpenCV VideoWriter won't write anything, although cvWriteToAVI does