图像轮廓是指由位于边缘、连续的、具有相同颜色和强度的点构成的曲线,它可以用于形状分析以及对象检测和识别。
- 一、轮廓的矩
- 二、轮廓的面积
- 三、轮廓的长度
- 四、轮廓的近似多边形
- 五、轮廓的凸包
- 六、轮廓的直边界矩形
- 七、轮廓的旋转矩形
- 八、轮廓的最小外包圆
- 九、轮廓的拟合椭圆
- 十、轮廓的拟合直线
- 十一、轮廓的最小外包三角形
一、轮廓的矩
- 轮廓的矩包含了轮廓的各种几何特征,如面积、位置、角度、形状等。
- cv2.moments()函数用于返回轮廓的矩,其基本格式如下:
ret = cv2.moments(array[, binaryImage])
ret为返回的轮廓的矩,是一个字典对象, 大多数矩的含义比较抽象, 但其中的零阶矩(m00)表示轮廓的面积
array为表示轮廓的数组
binaryImage值为True时,会将array对象中的所有非0值设置为1
img1 = np.zeros(o.shape, np.uint8) + 255
img1 = cv2.drawContours(img1, contours, -1,(0,255,0),2)
cv2.imshow('Contours',img1)
m0 = cv2.moments(contours[0])
print('轮廓0的矩:', m0)
print('轮廓0的面积:', m0['m00'])
二、轮廓的面积
- cv2.contourArea()函数用于返回轮廓的面积
- 其基本格式如下
ret = cv2.contourArea(contour[, oriented])
ret为返回的面积
contour为轮廓
oriented为可选参数, 其参数值为True时, 返回值的正与负表示表示轮廓是顺时针还是逆时针
参数值为False(默认值)时, 函数返回值为绝对值
三、轮廓的长度
- cv2.arcLength()函数用于返回轮廓的长度
- 其基本格式如下
ret = cv2.cv2.arcLength(contour, closed)
ret为返回的长度
contour为轮廓
closed为布尔值, 为True时表示轮廓是封闭的
四、轮廓的近似多边形
- cv2.approxPolyDP()函数用于返回轮廓的近似多边形
- 其基本格式如下:
ret = cv2.cv2.arcLength(contour, epsilon, closed)
ret为返回的近似多边形
contour为轮廓
epsilon为精度, 表示近似多边形接近轮廓的最大距离
closed为布尔值, 为True时表示轮廓是封闭的
arcl = cv2.arcLength(contours[0], True)
img2 = o.copy()
app = cv2.approxPolyDP(contours[0], arcl*0.05, True)
img2 = cv2.drawContours(img2, [app], -1, (255,0,0), 2)
cv2.imshow('contours',img2)
五、轮廓的凸包
- cv2.convexHull()函数用于返回轮廓的凸包
- 其基本格式如下
hull = cv2.convexHull(contours[, clockwise[, returnPointss]])
hull为返回的凸包, 是一个numpy.ndarray对象, 包含了凸包的关键点
contours为轮廓
clockwise为方向标记, 为True时, 凸包为顺时针方向, 为False(默认值)时, 凸包为逆时针方向
returnPointss为True时(默认值)时, 返回的hull中包含的是凸包关键点的坐标, 为False时, 返回的是凸包关键点在轮廓中的索引
hull = cv2.convexHull(contours[0])
print('returnPoints = Treu 时返回的凸包;\n',hull)
hull2 = cv2.convexHull(contours[0], returnPoints=False)
print('returnPoints = False时返回的凸包;\n',hull2)
cv2.polylines(o, [hull], True, (0,0,255),2)
cv2.imshow('ConvecHull',o)
六、资料
「机器视觉小学徒」的博客:
https://blog.csdn.net/weixin_43843069/article/details/122039788
网友评论