对象的固体度是由轮廓面积与其凸包面积的比率计算得出的。因此,要计算固体度,首先必须找到轮廓面积和凸包面积。可以使用 cv2.contourArea() 函数找到对象的轮廓面积。
等效直径是圆的直径,其面积与轮廓面积相同。可以按以下方式计算固体度和等效直径 –
语法
area = cv2.contourArea(cnt)
hull = cv2.convexHull(cnt)
hull_area = cv2.contourArea(hull)
solidity = float(area)/hull_area
equi_diameter = np.sqrt(4*area/np.pi)
其中, cnt 是图像中对象的轮廓点的numpy数组。
步骤
可以使用以下步骤来计算图像中对象的固体度和等效直径 –
导入所需的库。在以下所有Python示例中,所需的Python库为 OpenCV 。请确保您已经安装了它。
import cv2
使用 cv2.imread() 读取输入图像并将其转换为灰度。
img = cv2.imread('star.png.png')
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
对灰度图像应用阈值处理,以创建二进制图像。调整第二个参数以更好地检测轮廓。
ret,thresh = cv2.threshold(gray,40,255,0)
使用 cv2.findContours() 函数查找图像中的轮廓。
contours, _ = cv2.findContours(thresh, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
选择轮廓“ cnt ”或循环遍历所有轮廓。计算对象的固体度和等效直径。首先计算轮廓面积和凸包面积。
area = cv2.contourArea(cnt)
hull = cv2.convexHull(cnt)
hull_area = cv2.contourArea(hull)
solidity = float(area)/hull_area
equi_diamete