求助,使用opencv进行视频转化后,为什么转化后的视频打不开
我想实现视频和对应灰度视频的同步播放,以下是代码,原视频窗口有视频播放,新视频窗口没有视频播放,同时查找生成的视频,显示视频容量为0字节,怎么 办》?是编码器选的不对吗?谢谢
#include<cv.h>
#include<highgui.h>
const char * CAPTUREIN ="E:\\学习\\视频检测\\监控视频.avi";
const char * CAPTUREOUT ="E:\\学习\\视频检测\\监控视频修改.avi";
int main()
{
CvCapture * capture=0;
CvCapture *captureout=0;
cvNamedWindow("windowin",CV_WINDOW_AUTOSIZE);
cvNamedWindow("windowout",CV_WINDOW_AUTOSIZE);
capture=cvCreateFileCapture(CAPTUREIN);
if(capture==0)
return -1;
//IplImage * bgr_frame=cvQueryFrame(capture);//Init the video read
IplImage * bgr_frame;
double fps=cvGetCaptureProperty(capture,CV_CAP_PROP_FPS);
CvSize size=cvSize((int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_WIDTH),(int)cvGetCaptureProperty(capture,CV_CAP_PROP_FRAME_HEIGHT));
CvVideoWriter * writer =cvCreateVideoWriter(CAPTUREOUT,CV_FOURCC('M','P','4','2'),fps,size);
IplImage * logpolar_frame=cvCreateImage(size,IPL_DEPTH_8U,3);
while((bgr_frame=cvQueryFrame(capture))!=NULL)
//while(1)
{
//cvLogPolar(bgr_frame,logpolar_frame,cvPoint2D32f(bgr_frame->width/2,bgr_frame->height/2),40,CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS);
if(!bgr_frame) break;
cvShowImage("windowin",bgr_frame);
cvShowImage("windowout",logpolar_frame);
char c =cvWaitKey(33);
if(c==27)break;//
//cvCvtColor( bgr_frame, logpolar_frame, CV_RGB2GRAY );//彩色转换为灰度图像
// cvFlip( logpolar_frame, NULL, 0 );//翻转图像
cvWriteFrame(writer,logpolar_frame);
}
cvReleaseVideoWriter(&writer);
cvReleaseImage(&logpolar_frame);
cvReleaseCapture(&capture);
cvDestroyWindow("windowin");
return 0;
}
[解决办法]
应该是编解码器的关系,我的博客里面有几篇文章,讲述如何进行视频文件读取也压缩,也有代码,建议你去看看。