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表示线条的粗细
假设存在一个曲线A, B,在曲线上存在一个C点,离AB线段的距离最远,记为d1, 如果d1 < T(自己设定的阈值), 将AB线段作为AB曲线的替代,否者连接AC和BC, 计算AC线段上的D点离AB距离最远,记为d2,如果d2 < T,则使用AC线段替代AC曲线,否者继续连接划分。
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')