问题如下 我想从磁盘读取一个视频文件,并将其每帧转换为灰度,并将其写入新的视频文件 我正在使用以下代码
CvCapture* capture = cvCreateFileCapture( "/root/tree.avi");
if (!capture){
return -1;
}
...
CvVideoWriter* writer =
cvCreateVideoWriter("/root/output.avi",CV_FOURCC('D','I','V','X'),fps,size);
...
IplImage* gray_frame = cvCreateImage(
size,
IPL_DEPTH_8U,
1
);
while( (bgr_frame=cvQueryFrame(capture)) != NULL ) {
cvShowImage( "Example2_10", bgr_frame );
cvCvtColor(bgr_frame,gray_frame,CV_RGB2GRAY);
cvShowImage( "B&W result", gray_frame );
cvWriteFrame( writer, gray_frame);
char c = cvWaitKey(10);
if( c == 27 ) break;
}
...
问题是,程序运行正常,但无法将帧写入output.avi和creats只有空白output.avi文件只有5.5KB
还有一件事是我无法使用cvWriteFrame只编写gra_frame,如果我尝试编写bgr_frame,它会成功写入output.avi文件。
如果有人知道解决方案,请告诉我
答案 0 :(得分:3)
如果要编写灰度值图像,则需要将is_color=0
传递给cvCreateVideoWriter
函数。因此,您只能将彩色图像写入输出视频。
这是cvCreateVideoWriter
函数的最后一个参数,默认为1
:
CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1)
答案 1 :(得分:0)
在我的情况下,问题是我创建了一个CvVideoWriter
,其分辨率与我使用cvWriteFrame
写入的图像的分辨率不同。这在早期版本的OpenCV中运行良好,但无法在OpenCV 2.4中编写框架