OpenCV格闘記 その1

前回の日記の最後にエラー吐くって言っていたけど、ようやく原因がわかったので記録しておきます。

内部エラーの概要

cvQueryFrame > cvConvertImage(swap RB) > cvCvtColor(RGB2GRAY) > cvCanny > cvWriteFrame
コンパイルは出来るけど、OpenCVの内部エラーを示すエラーメッセージがコンソールに表示される。

原因と解決法

  • cvQueryFrameで得たフレームを直接叩いていた為→cvCloneImageでクローンを作ったフレームを叩く
  • cvWriteFrameに暗黙の制限がある(?)→cvCannyの次にcvCvtColor(GRAY2BGR)ならいける(3chじゃないとマズいのかもしれない)

その他気づいたこと

  • cvSaveImageにはリファレンスにない隠された(?)3番目の引数がある。int型で圧縮品質のパラメータ。100が最高でデフォルトは95みたい。

cvGetCapturePropertyのCV_CAP_PROP_FRAME_COUNTでフレーム総数が取得出来ない

解決法

srcは入力(CvCapture*)、FRAMESはフレーム総数(int)

cvSetCaptureProperty(src, CV_CAP_PROP_POS_AVI_RATIO, 1);
FRAMES = (int)cvGetCaptureProperty(src, CV_CAP_PROP_POS_FRAMES);

フレーム総数がわかったら必ずリセットしておく!

cvSetCaptureProperty(src, CV_CAP_PROP_POS_AVI_RATIO, 0);//Reset video position
cvSetCaptureProperty(src, CV_CAP_PROP_POS_MSEC, 0);//Reset video position

フレーム総数の件はtwitterで教えてもらいました!けいそ氏(@sasrai)、ありがとう!><