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 #轮廓面积与边界矩形比