问题如下
我想从磁盘读取视频文件并将其每一帧转换为灰度并将其写入新的视频文件
我正在使用以下代码来做到这一点

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,并且仅创建了仅5.5KB的空白output.avi文件

还有一件事是我无法使用cvWriteFrame只写gra_frame,并且如果我尝试写bgr_frame,它的确会成功写入output.avi文件。

如果有人知道解决方案,请告诉我

最佳答案

如果要写入灰度值图像,则需要将is_color=0传递给cvCreateVideoWriter函数。因此,您只能将彩色图像写入输出视频。

它是cvCreateVideoWriter函数的最后一个参数,默认为1:

CvVideoWriter* cvCreateVideoWriter(const char* filename, int fourcc, double fps, CvSize frame_size, int is_color=1)

关于打开CV cvWriteFrame,cvWriteToAVI,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9902031/

10-11 18:04