use*_*076 11 c video opencv avi
在网上有例子和学习OpenCv,Orielly中给出的代码.
经过多次尝试后,out.avi文件写入0字节.我想知道我哪里出错了.
以下是我用过的代码......
int main(int argc, char* argv[]) {
CvCapture* input = cvCaptureFromFile(argv[1]);
IplImage* image = cvRetrieveFrame(input);
if (!image) {
printf("Unable to read input");
return 0;
}
CvSize imgSize;
imgSize.width = image->width;
imgSize.height = image->height;
double fps = cvGetCaptureProperty(
input,
CV_CAP_PROP_FPS
);
CvVideoWriter *writer = cvCreateVideoWriter(
"out.avi",
CV_FOURCC('M', 'J', 'P', 'G'),
fps,
imgSize
);
IplImage* colourImage;
//Keep processing frames...
for (;;) {
//Get a frame from the input video.
colourImage = cvQueryFrame(input);
cvWriteFrame(writer, colourImage);
}
cvReleaseVideoWriter(&writer);
cvReleaseCapture(&input);
}
Run Code Online (Sandbox Code Playgroud)
Eri*_*ric 13
我敢打赌,cvCreateVideoWriter返回NULL.只需单步执行即可查看是否属实.在这种情况下,问题可能是CV_FOURCC(..),它没有找到编解码器并强制返回0;
您可以尝试使用-1而不是CV_FOURCC.在运行时期间会有一个提示,您可以选择适当的编解码器
也许您可以尝试在 for(;;) 内插入 printf("Frame found\n") 来查看它是否确实正在捕获帧。或者甚至更好:
if(colourImage == NULL) {
printf("Warning - got NULL colourImage\n");
continue;
}
cvNamedWindow( "test", 1);
cvShowImage( "test", colourImage );
cvWaitKey( 0 );
cvDestroyWindow( "test" );
Run Code Online (Sandbox Code Playgroud)
然后查看是否有任何窗口,以及它们是否包含正确的内容。