OpenCVのcv2.findContours()とcv2.drawContours()実装輪郭検出を使用して

cv2.findContours()関数

cv2.findContours(image, mode, method[, contours[, hierarchy[, offset ]]])

輪郭:階層2つの値を返します。

パラメータ
図1に示すように、画像:画像の輪郭を探します。
2、モード:プロファイル検索モードを表し、4つがあります
cv2.RETR_EXTERNALは:外形内周プロファイルを含むことだけ外側の輪郭検出を無視していることを示し;
cv2.RETR_LIST:内周、外周輪郭を含む全ての輪郭を検出するが、検出された輪郭は、そこには階層関係がなく、互いに独立した階層関係を確立しない。
cv2.RETR_CCOMP:すべての輪郭を検出し、2つだけ、すべての輪郭が、階層関係、トップ層の周囲を確立する場合、周辺の輪郭をさらに含むの内周他の輪郭情報は、内周面の全輪郭はトップに割り当てられ;
cv2.RETR_TREE:内側輪郭を含む階層ツリー構造の外側輪郭のプロファイルを確立する、内側輪郭プロファイルはまた、継続埋め込み含有してもよいです。
図3に示すように、方法:おおよその輪郭に近づく
cv2.CHAIN_APPROX_NONEを:しない1以下、すなわち、MAX(ABS(X1-X2)は2つの点の位置、隣接画素差分を輪郭ベクトル輪郭のすべての点を格納するために 、ABS(Y2-Y1)) == 1。
cv2.CHAIN_APPROX_SIMPLE:保存するためにのみ4点を輪郭内の全ての点は、ベクトル、輪郭の変曲点を唯一の輪郭情報の変曲点を保存線分に格納された情報点は、例えば、変曲点と変曲点との間に保持されず、矩形プロファイルプロファイル情報。
4、オフセット:ポイントは、すべてのオフセットを加えたすべての検出された輪郭点に対応する点に対応する原画像の輪郭情報に対してオフセット、オフセット、点も負の値であってもよいです。
5、輪郭:リスト、リスト要素はnumpyのndarrayで表される、各画像のプロファイルです。
6、階層:これはndarrayある、請求四つの要素階層の階層に対応する要素の数と輪郭の同じ数、各輪郭輪郭[I] [i]が[0]〜階層[i]は、それぞれ[3]、輪郭後、フロントプロファイルは、親プロファイルは、インデックス番号埋め込みプロファイルは、対応するエントリ場合、値は負です。opencv3.0のバージョンが変更され、第三は、埋め込まれたプロファイルの最初の子であり、第四は、親プロファイルです。

cv2.drawCountours()関数

cv2.drawCountours(img, contours, contourIdx, color, thickness)

パラメータ:
1、IMG:映像入力を描画する必要性を示します。
2、輪郭:FindContoursはリターンのアウトライン機能します。
3 contourIdx:インデックスプロファイルは、-1すべての輪郭を描くことを意味し;
4色:色の輪郭が描かれました。
5、厚さ:ライン太さのプロファイルを集め、

img = cv2.imread('contours.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
cv_show(thresh,'thresh')

ここに画像を挿入説明

contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
# 传入绘制图像,轮廓,轮廓索引,颜色模式,线条厚度
# 使用copy是为了不修改原图
#这里是绘制所有轮廓
draw_img = img.copy()
res = cv2.drawContours(draw_img, contours, -1, (0, 0, 255), 2)
cv_show(res,'res')

ここに画像を挿入説明

##只绘制第一个轮廓
draw_img = img.copy()
res = cv2.drawContours(draw_img, contours, 0, (0, 0, 255), 2)
cv_show(res,'res')

ここに画像を挿入説明

公開された27元の記事 ウォン称賛20 ビュー1548

おすすめ

転載: blog.csdn.net/qq_39507748/article/details/104549798
おすすめ