輪郭検出+外接四角形(opencv+python)

1. 検出輪郭

contours, hierarchy = cv2.findContours(image,mode,method)
  • 画像: 入​​力画像
  • mode: アウトラインのモード。

cv2.RETR_EXTERNAL は外側の輪郭のみを検出します

cv2.RETR_LIST によって検出された輪郭は階層関係を確立しません

cv2.RETR_CCOMP は 2 レベルの輪郭を確立します。上の層は外側の境界、内側の層は内側の穴の境界です。内側の穴に接続されたオブジェクトがある場合、このオブジェクトの境界も最上層にあります

cv2.RETR_TREE は、階層ツリー構造のアウトラインを作成します。

  • Method: 輪郭の近似方法。

cv2.CHAIN_APPROX_NOME はすべての輪郭点を保存し、隣接する 2 つの点間のピクセル位置の差は 1 を超えません。 cv2.CHAIN_APPROX_SIMPLE は水平方向、垂直方向、斜め方向の要素を圧縮し、この方向の終点座標のみを保持します。長方形の輪郭では、輪郭情報を保存するために 4 つの点だけが必要です; cv2.CHAIN_APPROX_TC89_L1、cv2.CV_CHAIN_APPROX_TC89_KCOS

  • 輪郭: 返された輪郭
  • 階層: 各輪郭に対応する属性

2. 等高線描画

cv2.drawContours(image, contours, contourIdx, color, thickness=None, lineType=None, hierarchy=None, maxLevel=None, offset=None)
  • 画像: 入​​力画像
  • 輪郭:画像の輪郭
  • contourIdx: 輪郭リスト内のどの輪郭を描画するかを指定します。-1 の場合、その中のすべての輪郭が描画されます。
  • color: 線の色
  • 太さ:線の幅

3. 外側の長方形

rect = cv2.minAreaRect(contours)
  • 等高線: 等高線情報
  • rect: 長方形の特性情報。その構造は次のとおりです: 長方形の中心 (x, y)、(幅、高さ)、回転角度。
points = cv2.boxPoints(rect)
points = np.int0(points)
  • rect: 長方形の特徴情報
  • Points: 最小の外接長方形の 4 点座標を取得します。
 image = cv2.drawContours(original, [points], 0, (0, 0, 255), 2)

4. 輪郭の特徴

img = cv2.imread('图片位置')
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
binary, contours, hierarchy = cv2.findContours(thresh, cv2RETR_TREE,cv2.CHAIN_APPROX_NONE)
cut = contours[0]
cv2.contourArea(cnt) #面积

cv2.arcLength(cnt,True) #周长,Ture表示闭合

epsilon = 0.1*cv2.arcLength(cnt,True)
approx = cv2.approxPolyDP(cnt,epsilon,True) #轮廓近似

x,y,w,h = cv2.bonudingRect(cnt)
img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2) #外接矩形

area = cv2.contourArea(cnt)
x,y,w,h = cv2.bonudingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area #轮廓面积与边界矩形比

おすすめ

転載: blog.csdn.net/qq_51377150/article/details/126178817