最近再做一个视频识别的项目,发现一个奇怪的问题,opencv的cvCreateVideoWriter函数得到正确执行并返回正确的CvVideoWriter结构体指针,但result=cvWriteFrame(writer,pFrameCur);怎么执行result都得0。而且生成的avi文件“神隐”了哪里找都找不到。

在黑屏程序下发现代码执行相当正常。原项目使用了多线程,将多线程改为顺序执行,一切正常,有没有有志之士帮忙解释下这个问题。代码如下:

unsigned __stdcall processImages( void *g)
{
	AviProcessor *proc= static_cast(g);//参数g是AviProcessor类指针
	int fNumber=0;//帧数
 
	//声明IplImage指针
 
	IplImage* pFrameCur = NULL; 
 
	CvMat** pFrameBuffer=new CvMat*[BFFRAME];
	CvMat* pFrameCurMat = NULL;//当前矩阵
	int lastx=0;
	int lasty=0;
	int w=0, h=0;
	int i=0, j=0;
 
    w = (int)cvGetCaptureProperty(proc->capture,CV_CAP_PROP_FRAME_WIDTH);//获取视频宽度
    h = (int)cvGetCaptureProperty(proc->capture,CV_CAP_PROP_FRAME_HEIGHT);//高度
 
	CvVideoWriter *writer = 0;//视频表面绘制
	int isColor = 0;
	int outCompressCodec = (int)cvGetCaptureProperty(proc->capture, CV_CAP_PROP_FOURCC);//表示codec的四个字符???
	int fps = (int)cvGetCaptureProperty(proc->capture, CV_CAP_PROP_FPS); //取得fps
	writer=cvCreateVideoWriter("output.avi",outCompressCodec,
                           fps,cvSize(w,h),isColor);
 
	FILE* fid;
	if(!(fid = fopen("subdxy.dat","w")))
		printf("no such file");
 
	//particles.output(fid);
	fprintf(fid, "the following is subframe dxy\n");//“子帧”
	fNumber=0;
	while (pFrameCur = cvQueryFrame(pCapture)) 
	{
		fNumber++;
		int result;
		result=cvWriteFrame(writer,pFrameCur); 
 
	}
	if(pFrameCur)
	{
		cvReleaseImage(&pFrameCur);
		pFrameCur = NULL;
	}
	if(writer)
	{
		cvReleaseVideoWriter(&writer);
		writer = NULL;
	}
fclose(fid);
 
    _endthreadex( 0 );
}
如无特殊声明,本文为Zhonghcc原创文章,转载请注明: 转载自Zhonghcc 's Blog
本文链接地址: cvCreateVideoWriter 多线程下怪问题

 回复

(必须)

(必须)

© 2017 Zhonghcc 's Blog Suffusion theme by Sayontan Sinha