VB(VB2005)によるOpenCV使用のサンプルプログラムの2番目です。
全ソースは下記からダウンロードできます。
OpenCVDemo2.lzh
このサンプルプログラムは
カメラから静止画を取り込み、矩形(長方形)を探し出して表示(緑色)します。
矩形が傾いている場合、その傾きを補正して表示します。
OpenCV付属サンプルの「squares.exe」を拡張したようなサンプルです。
またこのサンプルは画面表示や入力にOpenCVのUIを使用せず
VBの機能を積極的に使用して
静止画取り込みと画像処理部分のみにOpenCVを使用しています。
画像処理としては下記の流れとなります。
@静止画取得
Aノイズを除去
cvPyrDownにて1/2に縮小し、
cvPyrUpにて2倍に拡大することでノイズを除去する。
BRGBの各チャネル毎に下記C〜Gを実行し、
最も大きい矩形を選ぶ。
C二値化
対象とするチャネル(R,G,Bのいずれか)をcvSetImageCOIで選択し、
cvCopyで対象とするチャネルのみ取り出す。
cvThresholdで「二値化しきい値」以下を0、以上を255にする。
D輪郭線集出
cvFindContoursで輪郭線リストを取得する。
E取得した全ての輪郭線毎に下記F〜Gを実行し、
最も大きい矩形を選ぶ。
F輪郭線を直線近似
cvApproxPolyで対象輪郭線を直線に近似する。
近似した図形が四角形(辺の数=4)でなければ対象外とする。
G妥当な矩形か?
cvContourAreaで面積を求め、「最小矩形サイズ」より小さい場合は除外する。
cvCheckContourConvexityで、交差しているか凹型の四角形は除外する。
画像の四隅付近に2頂点以上ある場合は除外する。 (画面全体が選択されることを抑止するため)
4点の角度が90度±「最大角度誤差」の範囲でない場合は除外する。(台形や平行四辺形を除外するため)
H有効な矩形が見つかった場合、
基準点(回転角度が最も小さくなる左下の角)を選択する。
I出力画像が「角度補正後」の場合、
基準点を元に水平となるように回転させた画像を表示する。
(画像の回転にはcvWarpAffineによるアフィン変換を用いる)
以上が大まかな流れです。
すいませんが、詳細についてはコードを参照して下さい^^;