1 cv2.contourArea() 轮廓面积
函数原型:
retval = contourArea (contour, oriented)
参数:
- contour : 轮廓。
- oriented: 布尔值,当为True时,表示顺时针或逆时针计算。
2 cv2.arcLength() 轮廓长度
函数原型:
retval = cv2.arcLength (contour, closed)
参数:
- contour : 轮廓。
- closed: 布尔值,当为True时,表示闭合。
3 示例
import cv2
import numpy as np
img = cv2.imread('C:\\Users\\xxx\\Downloads\\contourImg.png') #读取图像
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) #转为灰度值图
ret, binary = cv2.threshold(gray,220,255,cv2.THRESH_BINARY) #转为二值图
contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,\
cv2.CHAIN_APPROX_NONE) #寻找轮廓
n=len(contours) #轮廓个数
contoursImg=[]
cv2.imshow("original",img) #显示原图#### 逐一在全黑背景上绘制并显示轮廓
for i in range(n):
area = cv2.contourArea(contours[i]) # 计算轮廓面积
length = cv2.arcLength(contours[i],True) # 计算轮廓长度
temp = np.zeros(img.shape, np.uint8) # 生成黑背景
contoursImg.append(temp)
contoursImg[i] = cv2.drawContours(contoursImg[i], contours, i, (0, 255, 0), 3) # 绘制轮廓
cv2.imshow("contours[" + str(i) + "]", contoursImg[i])#显示轮廓
print(f"轮廓{i}的面积:{area}, 长度:{length};")
cv2.waitKey()
cv2.destroyAllWindows()
轮廓0的面积:47722.5, 长度:826.080295920372; 轮廓1的面积:12979.5, 长度:583.2619735002518; 轮廓2的面积:37884.0, 长度:790.0;