合并帧代码不会在opencv中提供输出

合并帧代码不会在opencv中提供输出,c,opencv,video,merge,frames,C,Opencv,Video,Merge,Frames,我正在尝试合并多个帧以获得视频作为输出 我的代码: double fps = 20; IplImage *image; CvSize size = cvSize(320,240); image = cvLoadImage("image1.jpg",1); CvVideoWriter *writer = cvCreateVideoWriter("Video from Images.mpeg",CV_FOURCC('M','P','E','G'),fps,size); for(int counte

我正在尝试合并多个帧以获得视频作为输出

我的代码:

double fps = 20;
IplImage *image;
CvSize size = cvSize(320,240);

image = cvLoadImage("image1.jpg",1);
CvVideoWriter *writer = cvCreateVideoWriter("Video from Images.mpeg",CV_FOURCC('M','P','E','G'),fps,size);
for(int counter=0;counter < 376;counter++)
{
    cvWriteFrame( writer, image);
}
image = cvLoadImage("imag2.jpg",1);

for(int counter=0;counter < 376;counter++)
{
    cvWriteFrame(writer,image);
}

cvWaitKey(0); /*wait till a key is pressed..*/
cvReleaseVideoWriter(&writer);
cvReleaseImage(&image);
}
double fps=20;
IplImage*图像;
CvSize size=CvSize(320240);
image=cvLoadImage(“image1.jpg”,1);
CvVideoWriter*writer=cvCreateVideoWriter(“来自Images.mpeg的视频”、CV_FOURCC('M','P','E','G')、fps、size);
用于(int计数器=0;计数器<376;计数器++)
{
cvWriteFrame(writer,image);
}
image=cvLoadImage(“imag2.jpg”,1);
用于(int计数器=0;计数器<376;计数器++)
{
cvWriteFrame(writer,image);
}
cvWaitKey(0)/*等到按下一个键*/
cvReleaseVideoWriter(&writer);
cvReleaseImage(&image);
}

结果视频是一个空文件,我无法打开它。我做错了什么

根据您的代码,可能会出现一些问题:

  • 所有
    cvLoadImage()
    调用都可能失败,并且没有加载输入图像
  • 如果加载的图像不是320x240,则这是一个问题
  • cvCreateVideoWriter()
    可能失败
  • 如果第一个和第二个图像的大小不同,这是另一个问题
要解决其中一些问题,请安全地编写代码!始终检查调用的返回(代码未经测试):

IplImage*image=cvLoadImage(“image1.jpg”,1);
如果(!图像){
printf(!!!失败的cvLoadImage#1);
返回;
}
IplImage*image2=cvLoadImage(“imag2.jpg”,1);
如果(!image2){
printf(!!!失败的cvLoadImage#2”);
返回;
}
如果(图像->宽度!=图像2->宽度|
图像->高度!=图像2->高度){
printf(!!!图像有不同的大小!);
返回;
}
尺寸;
size.width=图像->宽度;
size.height=图像->高度;
双fps=20;
CvVideoWriter*writer=cvCreateVideoWriter(“来自Images.mpeg的视频”、CV_FOURCC('M','P','E','G')、fps、size);
if(!writer){
printf(!!!失败的cvCreateVideoWriter);
返回;
}
用于(int计数器=0;计数器<376;计数器++)
{
cvWriteFrame(writer,image);
}
用于(int计数器=0;计数器<376;计数器++)
{
cvWriteFrame(writer,image2);
}
cvReleaseVideoWriter(&writer);
cvReleaseImage(&image);
cvReleaseImage(&image2);

结束时的
}
比打开时的
{
要多…哦!!谢谢你在这里指出我犯的错误,但不幸的是,这不是解决办法。
IplImage* image = cvLoadImage("image1.jpg",1);
if (!image) {
    printf("!!! Failed cvLoadImage #1");
    return;
}

IplImage* image2 = cvLoadImage("imag2.jpg",1);
if (!image2) {
    printf("!!! Failed cvLoadImage #2");
    return;
}

if (image->width  != image2->width || 
    image->height != image2->height) {
    printf("!!! Images have different sizes!");
    return;
}

CvSize size;
size.width = image->width;
size.height= image->height;

double fps = 20;
CvVideoWriter *writer = cvCreateVideoWriter("Video from Images.mpeg", CV_FOURCC('M','P','E','G'), fps, size);
if (!writer) {
    printf("!!! Failed cvCreateVideoWriter");
    return;
}

for(int counter=0;counter < 376;counter++)
{
    cvWriteFrame( writer, image);
}

for(int counter=0;counter < 376;counter++)
{
    cvWriteFrame(writer,image2);
}

cvReleaseVideoWriter(&writer);
cvReleaseImage(&image);
cvReleaseImage(&image2);