该代码段应保存部分视频范围为start
和end
的视频。有一个结构数组(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/