輪郭画像のOpenCVの(周囲長、面積、および外部輪郭が略矩形と外接円である)、請求

ブログで見つけて、画像の輪郭を描画する方法について話して、今の一般的なこれらのプロファイルの機能とどのように対応する関数の内部でOpenCVの使用方法について話しています。

1. cv2.contourArea(cnt, oriented = False)  # 计算轮廓的面积

参数说明:cnt为输入的单个轮廓值;oriented:默认值false,面向区域标识符,
如果为true,该函数返回一个带符号的面积,其正负取决于轮廓的方向(顺时针还是逆时针)。
根据这个特性可以根据面积的符号来确定轮廓的位置。如果是默认值false,则面积以绝对值的形式返回.

2. cv2.arcLength(cnt, closed)   #  计算轮廓的周长

参数说明:cnt为输入的单个轮廓值,closed表示用来指定对象的形状是
闭合的(True),还是打开的一条曲线(False)3. cv2.aprroxPolyDP(cnt, epsilon, True)  # 用于获得轮廓的近似值,使用cv2.drawCountors进行画图操作

 参数说明:cnt为输入的轮廓值, epsilon为阈值T,
 通常使用轮廓的周长作为阈值,True表示的是轮廓是闭合的

4. x, y, w, h = cv2.boudingrect(cnt) # 获得外接矩形

参数说明:x,y, w, h 分别表示外接矩形的x轴和y轴的坐标,
以及矩形的宽和高, cnt表示输入的轮廓值

5.cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)  # 根据坐标在图像上画出矩形

参数说明: img表示传入的图片, (x, y)表示左上角的位置, 
(x+w, y+h)表示加上右下角的位置,(0, 255, 0)表示颜色,2表示线条的粗细

6. (x, y), radius = cv2.minEnclosingCircle(cnt) # 获得外接圆的位置信息

参数说明: (x, y)表示外接圆的圆心,radius表示外接圆的半径,cnt表示输入的轮廓

7. cv2.Cricle(img, center, radius, (0, 255, 0), 2)  # 根据坐标在图上画出圆

参数说明:img表示需要画的图片,center表示圆的中心点,
radius表示圆的半径, (0, 255, 0)表示颜色, 2表示线条的粗细

輪郭近似:

D1 <T(自身のセットの閾値)場合に、曲線Aがあると、B、C、線分ABから最も遠い距離、曲線上の点で存在する、NO、曲線ABの線分ABに代わるものとして、D1と呼ばACとBCを接続することにより、線分AC上のD点は、接続が分割されて続行するかどうか、あるいはもしD2 <T、次いでACライン曲線AC、D2と表記、最も遠いABから計算されます。
ここに画像を挿入説明

img = cv2.imread('contours2.png')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cnt = contours[0]

draw_img = img.copy()
res = cv2.drawContours(draw_img, [cnt], -1, (0, 0, 255), 2)
cv_show(res,'res')

ここに画像を挿入説明

epsilon = 0.05*cv2.arcLength(cnt,True) 
approx = cv2.approxPolyDP(cnt,epsilon,True)

draw_img = img.copy()
res = cv2.drawContours(draw_img, [approx], -1, (0, 0, 255), 2)
cv_show(res,'res')

ここに画像を挿入説明

第二に、外接矩形と外接円

img = cv2.imread('contours.png')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
ret, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_NONE)
cnt = contours[0]

x,y,w,h = cv2.boundingRect(cnt)
img = cv2.rectangle(img,(x,y),(x+w,y+h),(0,255,0),2)
cv_show(img,'img')

ここに画像を挿入説明
ここに画像を挿入説明

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

おすすめ

転載: blog.csdn.net/qq_39507748/article/details/104550500