OpenCV 2.4.9 VideoWriter无法正常工作

时间:2017-11-29 07:30:13

标签: opencv

我使用yocto项目安装了opencv 2.4.9。

VideoWriter video("out.avi",CV_FOURCC('M','J','P','G'),30, 
  Size(frame_width,frame_height));

没有创建out.avi文件。

这是代码:

int main()
{
  cv::VideoCapture capture(0);

  int frame_width = capture.get(CV_CAP_PROP_FRAME_WIDTH);
  int frame_height = capture.get(CV_CAP_PROP_FRAME_HEIGHT);

  VideoWriter video("out.avi", CV_FOURCC('M','J','P','G'), 30, 
    Size(frame_width,frame_height));

  if (!capture.isOpened())
  {
    printf("Error in open\n");
  }

  cv::Mat frame;

  while(1)
  {
    if (!capture.read(frame))
    {
      printf("Error in capture\n");
    }
    video.write(frame);

    cv::waitKey(30);
  }
}

但是相同的代码正在x86 linux上运行。

3 个答案:

答案 0 :(得分:2)

如果代码在Linux上运行,则错误可能来自于您的Windows机器上没有可用的MJPG编解码器。 测试它的一种简单方法是将CV_FOURCC('M','J','P','G')替换为-1,这样您的程序就会要求您在列表中选择编解码器。

除此之外,我建议你在while循环后添加video.release();。有时,当VideoWriter实例发布不佳时,视频将被创建,但您将无法使用VLC或任何其他媒体播放器读取它。

答案 1 :(得分:0)

感谢您的回复。我将CV_FOURCC('M','J','P','G')改为-1并尝试了。但文件本身并没有创建。

答案 2 :(得分:0)

我使用open.cv 2.4.10包中的cap.cpp和cap_gstreamer.cpp编译。 我编译了适当的库,包括像,​​

g ++ capture.cpp cap.cpp cap_gstreamer.cpp -lgtk-x11-2.0 -lgdk-x11-2.0 -lpangocairo-1.0 -latk-1.0 -lcairo -lgdk_pixbuf-2.0 -lgio-2.0 -lpangoft2-1.0 -lpango- 1.0 -lgobject-2.0 -lglib-2.0 -lfontconfig -lfreetype -lgthread-2.0 -lglib-2.0 -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lgstvideo-1.0 -lgstbase-1.0 -lgstreamer-1.0 - lgobject-2.0 -lglib-2.0 -lgstapp-1.0 -lgstbase-1.0 -lgstreamer-1.0 -lgobject-2.0 -lglib-2.0 -lgstriff-1.0 -lgstreamer-1.0-lgobject-2.0 -lglib-2.0 -lgstpbutils-1.0 -lgstreamer- 1.0 -lgobject-2.0 -lglib-2.0 -lv4l1 -lv4l2 -lavcodec -lavformat -lavutil -lswscale -lbz2 -lopencv_core -lopencv_imgproc -lopencv_highgui -lopencv_ml -lopencv_video -lopencv_features2d -lopencv_calib3d -lopencv_objdetect -lopencv_contrib -lopencv_legacy -lopencv_flann

然后这个捕获对我有用。谢谢。