OpenCV、機械学習、はやりのDeep learningの環境構築の方法、サンプルの動かし方、APIの使い方、Tipsなどをすぐに忘れてしまうので、備忘録として記録している。記憶がなくなるスピードが、早いのでメモしておかないと再現できなくなる確率が高まっている。 最近、再度HDDを飛ばしてしまい、過去の自分のページに再度助けられた。 また、DNNモジュールを触る機会が増えているので、C++からPyhonへと鞍替え中。 内容を気にいっていただければ、twitterで紹介願います。
2013年2月7日木曜日
OpenCVで傾いた画像をまっすぐにする
調べ物をしていて偶然見つけたブログのメモ
2つの点から傾きの角度を計算し、画像の中心点を与えてアフィン変換用のmatrixを求め、アフィン変換を行う
cv::Mat r = cv::getRotationMatrix2D(center, angle, 1.0);
cv::Mat dst;
cv::warpAffine(im0, dst, r, im0.size());
ほかにも役立ちそうな内容が掲載されている。
OpenCVで指定した色の物体を追跡するデモの補足
OpenCV 2 Computer Vision Application Programming CookbookのP108に meanShiftを使用した物体検出のデモが掲載されている
こちらでは、RGBからHSVへの変換後、cv::splitで std::vector<cv::Mat>に変換し、v[0]で、Hueデータにアクセスしている
OpenCVで指定した色の物体を追跡するデモを試してみた
指定した色を有する物体を追跡するデモが、samples\cpp\camshiftdemo.cppで提供されている
ビルドして、コマンドライン引数にカメラ番号を与えて起動すればよいが、めんどくさい場合は、ソースのcap.open()にカメラ番号を直接指定し、ビルドすればよい
大まかな処理の流れ
1 マウスで初期エリアを指定
2 マスク画像の作成
3 RGBからHSV変換し、H画像の取得
4 指定エリアのヒストグラムを計算、正規化、描画
5 ヒストグラムを元にBackProjectionを計算
6 計算結果にマスクをかける
7 CamShiftにより対象エリアの計算
8 次回探索枠の計算
9 結果の表示
であり、2-9を繰り返すことになる
2 マスク画像の作成
inRange(hsv, Scalar(0, smin, MIN(_vmin,_vmax)),Scalar(180, 256, MAX(_vmin, _vmax)), mask);
で H 0-180 (全部)
S smin - 256 再度の小さい画素は使用しない
V 明るさ vmin-vmax 黒つぶれ、白とび部は、色相がずれるので使用しない
を指定し、色ベースの追跡を行う画素の選別をしておく
あとで、calcBackProjectの結果とandをとっているが、backproj &= mask;
calcHistの計算時にmaskをかけてもよい気がする
7 CamShift
meanShift()の改良版 WindowのサイズとWindowの方向性も検出できる
CamShift(backproj, trackWindow, TermCriteria( CV_TERMCRIT_EPS | CV_TERMCRIT_ITER, 10, 1 ));
3番目のパラメータは、停止条件であり、CV_TERMCRIT_EPS(精度) 10 または、CV_TERMCRIT_ITER(繰り返し数) 1で停止する
デモでは、ゆるい条件設定になっており早く、終了する
その他
calcBackProjectのtutorialでは、backprojをMatNDで宣言していたが、このデモでは、Matで宣言しているので、あまり厳密に区別しなくてよいみたいだ
OpenCVのコマンドパーサーについて
OpenCV 2.3からコマンドラインの引数を解析するモジュール cv::CommandLineParser が提供されている
なぜか、OpenCV 2.4.3 documentationの検索では、説明を見つけることができなかったが、ドキュメントはここに準備されている
コマンドラインに与えられた引数を、get<T>("name")または、get<T>(index)で取得できる
2013年2月6日水曜日
OpenCVのBack Projection試してみた2
Back Projectionがよくわからないので、tutrialを試してみた。
ソースは、samples\cpp\tutorial_code\Histograms_MatchingのcalcBackProject_Demo2.cppを使用した
Demo2の説明は、残念ながら準備されていないようだが、ソースを追えば、処理内容は理解できる。
今度は、トラックバーがbinの数ではなく、Floodfillnの範囲を指示するために使用している。
また、ヒストグラムの計算と、calcBackProjectでは、Floodfillで作成したマスク画像を使用している。
Maskすることの効果は、何か理解できていない
参考にプログラムを実行した図を載せておく
OpenCVのBack Projection試してみた
Back Projectionがよくわからないので、tutorialを試してみた。
ソースは、samples\cpp\tutorial_code\Histograms_MatchingのcalcBackProject_Demo1.cppを使用した
コードの説明は、ここに記載されており、各処理に関しての説明が記載されているが、これを読んでも何ができるのかよく理解できなった。
いろいろ調べた結果、Back Projectionの役割に関しては、OpenCV 2 Computer Vision Application Programming CookbookのP103のほうがわかりやすい。
元のROIのヒストグラムを計算しヒストグラムを特徴量として、基準画像と比較対処の画像の類似度を求めるのが、calcBackProjectという理解をした
登録:
投稿 (Atom)