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)、ありがとう!><