2012-02-29 4 views
3

私はopencvを初めて使用しています。ビデオファイルに書き込むときに問題があります。基本的に私はHDウェブカメラから読んで、aviに書きます。 runableコード:opencvを使って録画するとき、ビットレートの許容誤差が小さすぎます

#include "cv.h" 
#include "highgui.h" 
int main(int argc, char** argv){ 
    CvCapture* capture=NULL; 
    capture=cvCreateCameraCapture(0); 
    if(!capture){ 
      return -1; 
    } 
    IplImage *bgr_frame=cvQueryFrame(capture); 
    double fps=cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); 
    CvSize size=cvSize((int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_WIDTH), 
          (int)cvGetCaptureProperty(capture, CV_CAP_PROP_FRAME_HEIGHT));   
CvVideoWriter* writer=cvCreateVideoWriter(argv[1], 
              CV_FOURCC('M','J','P','G'), 
              fps, 
              size); 
    cvNamedWindow("Video", CV_WINDOW_AUTOSIZE); 
    while((bgr_frame=cvQueryFrame(capture))){ 
      cvWriteFrame(writer, bgr_frame); 
      cvShowImage("Video", bgr_frame); 
      char c=cvWaitKey(60); 
      if(c==27){ 
        break; 
      }   
    }   
    cvReleaseVideoWriter(&writer); 
    cvReleaseImage(&bgr_frame); 
    cvReleaseCapture(&capture); 
    return 0; 
} 

実行しているとき、私はエラー

Output #0, avi, to 'test.avi': 
Stream #0.0: Video: mjpeg, yuvj420p, 1280x720, q=2-31, 117964 kb/s, 90k tbn 
[mjpeg @ 0x7fd55b805600] bitrate tolerance too small for bitrate 
WARNING: Could not create empty movie file container. 
OpenCV Error: Assertion failed (dst.data == dst0.data) in cvCvtColor, file /opt/local/var/macports/build/_opt_local_var_macports_sources_rsync.macports.org_release_tarballs_ports_graphics_opencv/opencv/work/OpenCV-2.3.1/modules/imgproc/src/color.cpp, line 3175 
terminate called throwing an exceptionAbort trap: 6 

を取得するカメラはMacBookの上のHDウェブカメラです。問題を引き起こすカメラですか?もしそうなら、ビットレート許容値を低く設定できますか?私はopencvの新人です。ありがとう!

ところで、CvVideoWriterはargv [1] .aviが存在しないときに新しいファイルを作成できますか?

+0

私はPythonライブラリで同じ問題があります。 –

+0

@DanielFloresカメラのFPSは0です。 – YankeeWhiskey

答えて

2

はい、cvCreateVideoWriterはまだ存在しない場合に新しいファイルを作成します。

FPS検出コードがすべてのウェブカメラドライバに実装されていないため、問題が発生します。

double fps=(double)cvGetCaptureProperty(capture, CV_CAP_PROP_FPS); 
assert(fps>0.0); 

そして、それを実行している:1つのアサートを追加してMac上であなたのコードを試してみましたFPSと

./w x.avi 
Assertion failed: (fps>0.0), function main, file w.cpp, line 11. 
Abort trap: 6 

AVIファイルは、それが作成されていない理由です、実行されません。

+2

最近の返事ですが、とにかく感謝しています。 – YankeeWhiskey

関連する問題