opencv将摄像头输出写入avi文件 [英] opencv write webcam output to avi file

查看:176
本文介绍了opencv将摄像头输出写入avi文件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试使用opencv从我的摄像头输出创建一个avi视频.没有引发异常,但是它创建的avi文件的大小为414字节,并且不会增长.

I am trying to create an avi video from my webcam output using opencv. No exceptions are thrown, however the avi file it creates is 414 bytes in size and does not grow.

它也不会与任何媒体播放器一起播放.我怀疑写入文件部分有问题.

Also it will not play with any media player. I suspect there is something wrong with the writing to file part.

这是代码:

  CvCapture *capture = cvCaptureFromCAM( 0 );

  int width = ( int )cvGetCaptureProperty( capture, 
  CV_CAP_PROP_FRAME_WIDTH );

  int height = ( int )cvGetCaptureProperty( capture,
  CV_CAP_PROP_FRAME_HEIGHT );
  CvVideoWriter *writer = cvCreateVideoWriter("CamCapture.avi",                                                     
  -1,30, cvSize(  width, height ) );

  cvNamedWindow("capWindow", CV_WINDOW_AUTOSIZE);
  IplImage *frame = 0;

  // this returns 0 not sure why ??
  //double fps = cvGetCaptureProperty(capture, CV_CAP_PROP_FPS);
  double fps = 30;

  while( 1 )
  {
      frame = cvQueryFrame( capture );
      cvShowImage("capWindow",frame);
      cvWriteFrame( writer, frame );
      char c = cvWaitKey(1000/fps);

      if( c == 27 ) break;
  }

   cvReleaseCapture( &capture );
   cvReleaseVideoWriter( &writer );
   cvDestroyWindow( "capWindow" );

我没有运气就参考并尝试了以下示例:

I have referenced and tried the following samples with no luck:

  • http://gipetrou.com/scc/2010/12/12/save-video-from-webcam-with-opencv-2-1/
  • http://answers.oreilly.com/topic/1366-how-to-write-to-an-avi-file-with-opencv/
  • https://www.cs.utexas.edu/~teammco/misc/udp_video/

推荐答案

不要使用过时的C,请使用C ++ api,它易于使用和简单,例如,上面的代码可以像C一样重写,

Dont use outdated C, use C++ api, it is easy to use and simple, for example the above code can be rewritten in C++ like,

#include "opencv2/opencv.hpp"
#include <iostream>

using namespace std;
using namespace cv;

int main(){

    VideoCapture vcap(0); 
      if(!vcap.isOpened()){
             cout << "Error opening video stream or file" << endl;
             return -1;
      }

   int frame_width=   vcap.get(CV_CAP_PROP_FRAME_WIDTH);
   int frame_height=   vcap.get(CV_CAP_PROP_FRAME_HEIGHT);
   VideoWriter video("out.avi",CV_FOURCC('M','J','P','G'),10, Size(frame_width,frame_height),true);

   for(;;){

       Mat frame;
       vcap >> frame;
       video.write(frame);
       imshow( "Frame", frame );
       char c = (char)waitKey(33);
       if( c == 27 ) break;
    }
  return 0;
}

这篇关于opencv将摄像头输出写入avi文件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆