OpenCV
映像処理の勉強として下の本を一冊取り組んでみました。
WindowsのVisualStudioとMacOSでのXcodeのどちらもやりました。
プログラミング初心者なので、最初はビルド失敗に悩まされ続けました…。
OpenCVの使用例について
- 2値化:画像のピクセル値を0と1に
- エッジ検出:ピクセル値の勾配を元にモノの輪郭を抽出
- ハフ変換:画像の直線や曲線を抽出したものを数式に変換
- 傾き補正:傾いた画像を水平になるように修正
- モルフォロジー演算:画像中の幾何構造を解析・処理
演算各種…dilation/erosion/opening/closing - ヒストグラム:ピクセル値の度数分布図
- テンプレートマッチング:画像から所定の物体を検出
- 特徴点検出:主に画像の端点や交差点、角などを検出
- オプティカルフロー検出:映像の前後で物体の移動量を線分で図示
3手法…ブロックマッチング法、Lucas-Kanade法、画像ピラミッド型Lucas-Kanade法 - 物体追跡:特徴点とオプティカルフローを応用
- カメラキャリブレーション:基準となる物体を利用してカメラに入力される画像の歪みを修正する
- モーションテンプレート:映像から動きの方向などを抽出
- 物体検出:画像や映像から人の顔や目などのオブジェクトを検出
- 3次元形状の推定:2台のカメラを用いて3次元の形状を推定する手法(よくわからないけど両眼視差うんぬんの話)
OpenCVで使用する構造体
- IplImage:画像の格納
- CvMat:行列の格納(浮動小数点数型)
- CvArr:上の2つの構造体をまとめて呼ぶ型
関数
- cvNamedWindow
- cvResizeWindow
- cvLoadImage
- cvShowImage
- cvWaitKey
- cvDestroyWindow
- cvReleaseImage …など割愛
やったこと
- 画像・映像の表示⇨処理⇨保存(2章)
- カラーチャンネルの分離・合成(3チャンネル画像から赤青緑チャンネルそれぞれを表示)
- 移動物体の抽出(映像の前後で差分を取り背景画像を除去)
- 空間フィルタリング
グラディエントフィルタ(-1,0,1のやつ):縦方向のエッジを検出
ハイパスフィルタ(-1で8を囲うやつ):エッジ強調
ラプラシアンフィルタ(1で-8を囲うやつ⇦3×3の場合):全方向エッジ検出
ガウシアンフィルタ(1,2,1 -2,4,2-...を16で割るやつ):画像平滑化やノイズ除去 - クロマキー合成、カラーモデル変換
- テキスト・グラフィックスの描画
- トラックバー付き2値化(閾値任意変更)
- マウスイベントの取得
- テンプレートマッチング
- オプティカルフロー検出
- 特徴点検出と物体追跡
- 周波数フィルタリング(映像のエッジ検出-閾値任意変更)
- モーションテンプレート
- 物体検出(顔、目)
箇条書きにすると結構やってるように見えますが、実際使えるかどうかは別です。
OpenGLも勉強しなきゃ…。