![]() |
OpenCV 5.0.0
Open Source Computer Vision
|
Prev Tutorial: 輪郭の特性
Next Tutorial: 輪郭の階層構造
輪郭に関する第2章で凸包が何であるかを学んだ。物体のこの凸包からの逸脱はすべて凸性の欠陥とみなせる。これは画像を用いて可視化できる。開始点と終了点を結ぶ線を引き、最遠点に円を描く。
次の関数を使う: cv.convexityDefects (contour, convexhull, convexityDefect)
| contour | 入力輪郭。 |
| convexhull | convexHull を用いて求めた凸包。輪郭点のうち凸包を構成する点のインデックスを含んでいる必要がある |
| convexityDefect | 凸性の欠陥を表す出力ベクトル。各凸性欠陥は4要素 (start_index, end_index, farthest_pt_index, fixpt_depth) で表される。ここで各インデックスは凸性欠陥の開始点・終了点・最遠点に対応する、元の輪郭における0始まりのインデックスであり、fixpt_depth は最遠の輪郭点と凸包との距離の固定小数点近似(8ビットの小数部を持つ)である。すなわち、欠陥の深さの浮動小数点値を得るには fixpt_depth/256.0 とする。 |
この関数は、画像内の点と輪郭の間の最短距離を求める。点が輪郭の外側にあるときは負、内側にあるときは正、輪郭上にあるときは0となる距離を返す。
次の関数を使う: cv.pointPolygonTest (contour, pt, measureDist)
| contour | 入力輪郭。 |
| pt | 輪郭に対して判定する点。 |
| measureDist | true の場合、関数は点から最も近い輪郭エッジまでの符号付き距離を推定する。それ以外の場合は、点が輪郭の内側にあるかどうかのみを判定する。 |
OpenCVには2つの形状、または2つの輪郭を比較し、類似度を示す指標を返す関数 cv.matchShapes() がある。結果が小さいほどマッチングが良好である。これはhuモーメント値に基づいて計算される。さまざまな測定方法についてはドキュメントで説明されている。
次の関数を使う: cv.matchShapes (contour1, contour2, method, parameter)
| contour1 | 1つ目の輪郭またはグレースケール画像。 |
| contour2 | 2つ目の輪郭またはグレースケール画像。 |
| method | 比較手法。cv::ShapeMatchModes を参照 |
| parameter | 手法固有の引数(現在は未サポート)。 |