2013年5月27日月曜日

OpenCVのサンプルプログラム segment_objects.cppを動かしてみた


samples\cpp\segment_objects.cppをC:\opencv245\samples\gpu\768x576.aviで試してみた

helpによると、このサンプルは、背景差分で得られた接続された要素をきれいにする簡単な方法を示すものだそうだ

処理の内容

main関数内で、動画像ファイル(カメラからの入力画像)を読み取り

BackgroundSubtractorMOGを使用して
(update_bg_modelは、背景の更新を行うかを示すフラグ)

前景と背景を求めている

求めた後、refineSegments内で、得られた前景画像に対して

膨張3回、収縮6回、膨張3回を行い、その後、

findContoursで輪郭を検出

検出された各領域の面積を求め、

最大面積を有する輪郭のみ結果の画像として描画している


処理結果画像



本来は、真ん中のように最大物体しか表示しないが、わかりやすいように、右図のようにすべての前景を表示させてみた

dilate(temp, temp, Mat(), Point(-1,-1), niters);
の後に
imshow("temp", temp);を追加

0 件のコメント:

コメントを投稿