该代码段应保存部分视频范围为startend的视频。有一个结构数组(data[i])保存原始视频中视频的开始和结束帧。共有8张照片。

for (int i = 0; i < finalCount-1; ++i) {
    capture = cvCaptureFromAVI("Stats\\Shots\\Cricketc1.avi");
    assert(capture);

    int frame_number = 0;
    int start = data[i].start_frame;
    int end   = data[i].end_frame;

    char shotname[100];
    strcpy_s(shotname, "shot_");
    char shot_id[30];
    _itoa_s(data[i].shot_no, shot_id, 10);
    strcat_s(shotname, shot_id);
    strcat_s(shotname, ".avi");

    IplImage* image = NULL;

    CvVideoWriter* writer = NULL;
    writer = cvCreateVideoWriter (shotname, CV_FOURCC('i','Y','U','V'), fps, cvSize(width, height), 1);
    assert(writer);
    while (frame_number >= start && frame_number < end) {
        image = cvQueryFrame(capture);
        assert(image);
        cvWriteFrame(writer, image);
    }
    cvReleaseImage(&image);
    cvReleaseVideoWriter(&writer);
    cvReleaseCapture(&capture);
    cout << shotname << " saved ..." << endl;
}

运行该程序后,将创建8个视频文件,大小为6kb,并且不运行。我已经尝试了各种编解码器,例如divx,mjpg,mpg2,iyuv等,但都给出了相同的结果。

最佳答案

如果Gunther Fox的答案无法帮助您尝试使用其他编解码器-这很奇怪,但是在我的情况下,iyuv根本无法正常工作,而其他一些编解码器也可以正常工作,但是我在调​​试时无法读取它们...对我来说- ms video和radius cinepak始终可以正常工作(写入和读取),iyuv根本不起作用,其他代码-写入和读取,但在调试时不起作用。

关于c++ - 在opencv中使用cvVideoWriter时出错?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/14147208/

10-09 06:34