代码很简单,如下:
#include"stdafx.h"
#include <stdio.h>
#include <cv.h>
#include <highgui.h>int main()
{
int i = 0;  
IplImage* img = 0;  
char image_name[25];  

CvVideoWriter *writer = 0;  
int isColor = 1;  
int fps     = 30; // or 25   writer=cvCreateVideoWriter("..\\out.avi",CV_FOURCC('X','V','I','D'),fps,cvSize(640,480),isColor);  

cvNamedWindow("vivi");  
while(1)  
{  
sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");
img = cvLoadImage(image_name, -1);
if(img == NULL)
break;
cvShowImage("vivi", img);  
char key = cvWaitKey(20);  
cvWriteFrame(writer, img);  

}  
cvReleaseVideoWriter(&writer);  
cvDestroyWindow("vivi");   return 0;
}
 感觉很简单,但是看了好久也没看出来。。
=====================
然后把它改成了下面这个样纸,发现,第一次可以运行。紧接着在执行一次就又发生了冲突。
很是纠结,一直对内存冲突没辙。
#include"stdafx.h"
#include <stdio.h>
#include <cv.h>
#include <highgui.h>int main()
{
int i = 0;  
IplImage* img = 0;  
char image_name[25];   CvVideoWriter *writer = 0;  
int isColor = 1;  
int fps     = 30; // or 25   sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");
img = cvLoadImage(image_name, -1); //创建窗口  
int frameW = img->width; 
int frameH = img->height; 
writer=cvCreateVideoWriter("..\\out.avi",CV_FOURCC('X','V','I','D'),fps,cvSize(frameW,frameH),isColor);   cvNamedWindow("vivi");  
while( img!=NULL)  
{  
cvShowImage("vivi", img);  
char key = cvWaitKey(20);  
cvWriteFrame(writer, img);  
sprintf(image_name, "%s%d%s", "image", ++i, ".jpg");
img = cvLoadImage(image_name, -1);

}  
cvReleaseVideoWriter(&writer);  
cvDestroyWindow("vivi");   return 0;
} 请大家多多指教。

解决方案 »

  1.   

    加断点调试一下吧 看看writer=cvCreateVideoWriter("..\\out.avi",...)是否创建成功
      

  2.   

    嗯 图片大小是一样的,是我从视频中抽帧保存的图片~~加了端点试了下了,writer 也应该创建成功了~最纳闷的是,下面这个,第一次可以跑,也生成了视频了,第二次跑就  地址 冲突 了这是为嘛捏
      

  3.   

    看着没有问题呀,试试用OpenCV的c++接口函数
      

  4.   


     我也觉得没什么问题撒。哎内存冲突神马的真实烦死人。opencv 还真没怎么用过 C++的 ··· 嘿嘿
      

  5.   

    难道这是opencv2.1的bug么?网上说 2.2 版本的就可以了。。