![]() |
OpenCV 4.13.0
Open Source Computer Vision
|
次のチュートリアル: 輪郭の特徴
輪郭は、同じ色または強度を持つ(境界に沿った)連続した点をすべて結んだ曲線として簡単に説明できる。輪郭は形状解析や物体検出・認識に役立つツールである。
輪郭を描画するには、cv.drawContours 関数を使用する。境界点が分かっていれば、任意の形状を描画するためにも使用できる。
次の関数を使用する: cv.findContours (image, contours, hierarchy, mode, method, offset = new cv.Point(0, 0))
| image | 入力画像。8ビットのシングルチャンネル画像。非ゼロのピクセルは1として扱われる。ゼロのピクセルは0のまま残るため、画像は2値として扱われる。 |
| contours | 検出された輪郭。 |
| hierarchy | 画像のトポロジに関する情報を格納する。輪郭の数と同じ数の要素を持つ。 |
| mode | 輪郭の取得モード(cv.RetrievalModes を参照)。 |
| method | 輪郭の近似手法(cv.ContourApproximationModes を参照)。 |
| offset | 各輪郭点をシフトする省略可能なオフセット。輪郭を画像のROIから抽出し、その後それらを画像全体の文脈で解析する場合に有用である。 |
cv.drawContours (image, contours, contourIdx, color, thickness = 1, lineType = cv.LINE_8, hierarchy = new cv.Mat(), maxLevel = INT_MAX, offset = new cv.Point(0, 0))
| image | 出力画像。 |
| contours | すべての入力輪郭。 |
| contourIdx | 描画する輪郭を示す引数。負の値の場合、すべての輪郭が描画される。 |
| color | 輪郭の色。 |
| thickness | 輪郭を描画する線の太さ。負の値の場合、輪郭の内部が塗りつぶされる。 |
| lineType | 線の連結性(cv.LineTypes を参照)。 |
| hierarchy | 階層に関する省略可能な情報。一部の輪郭だけを描画したい場合にのみ必要となる(maxLevelを参照)。 |
| maxLevel | 描画する輪郭の最大レベル。0の場合、指定した輪郭のみが描画される。1の場合、輪郭とそのすべての入れ子になった輪郭が描画される。2の場合、輪郭、すべての入れ子になった輪郭、さらにその入れ子になった輪郭、というように描画される。この引数は、利用可能な階層がある場合にのみ考慮される。 |
| offset | 省略可能な輪郭シフト引数。 |
これは cv.findContours 関数の5番目の引数である。実際には何を表しているのだろうか?
先ほど、輪郭は同じ強度を持つ形状の境界であると述べた。輪郭は形状の境界の(x,y)座標を格納する。しかし、すべての座標を格納するのだろうか?それを指定するのがこの輪郭の近似手法である。
cv.ContourApproximationModes.CHAIN_APPROX_NONE.value を渡すと、すべての境界点が保存される。しかし実際にすべての点が必要だろうか? 例えば、直線の輪郭を求めたとする。その直線を表現するのに線上のすべての点が必要だろうか? いや、必要なのは線の両端の2点だけである。これが cv.CHAIN_APPROX_SIMPLE が行うことである。冗長な点をすべて取り除いて輪郭を圧縮し、メモリを節約する。