gpt4 book ai didi

c++ - 在 opencv 中使用 cvVideoWriter 时出错?

转载 作者:行者123 更新时间:2023-11-28 00:50:52 27 4
gpt4 key购买 nike

此代码片段应该保存视频的一部分,其范围由 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 等,但都给出了相同的结果。

最佳答案

在您的 while 循环中,frame_number 永远不会递增。既然你说程序实际执行并创建文件,这意味着你的 while 循环中没有任何东西运行......否则你会陷入无限循环,因为 frame_number 会始终为 0

我建议您将 frame_number 初始化为 start 而不是 0 并且没有理由让它存在于循环范围之外所以 for 似乎更合适:

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

...

for (int frame_number = start; frame_number < end; frame_number++) {
image = cvQueryFrame(capture);
assert(image);
cvWriteFrame(writer, image);
}

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

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com