合并帧代码不会在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);