opencv存储视频时存储大小为0以及打开是乱码的解决方法
CvCapture *capture=cvCaptureFromAVI(m_avipath);
if (!capture)
{
fprintf(stderr,"Could not initialize capturing...\n");
return;
}
int outCompressCodec = (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FOURCC);
double fps=cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);//帧率
int framecount=(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_COUNT);
int i=0;
CvVideoWriter *writer=0;
int frameW=cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH);
int frameH=cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT);
writer=cvCreateVideoWriter("f:\\2.avi",outCompressCodec,
fps,cvSize(frameW,frameH),1);
IplImage *outimg=0;
for (i=0;i<framecount;i++)
{
outimg=cvQueryFrame(capture);
// if(i%10==0)
cvWriteFrame(writer,outimg);
}
cvReleaseVideoWriter(&writer);
cvReleaseCapture(&capture);
一定要在写完视频的时候调用cvReleaseVideoWriter(&writer);否则存储的视频大小为0
cvCreateVideoWriter时,编码模式,图片大小应该和原始图片大小一致,可以通过cvGetCaptureProperty得到帧宽度和高度,帧率可以和原始视频不同。
可以通过在循环语句中加入判断来提取出某些帧图像来组成新的视频。
补充:综合编程 , 其他综合 ,