在这里,我们将学习提取一些常用的性质的物体,如固体,等效直径,面具图像,平均强度等。
1.纵横比
它是物体的宽度与高度的比值。
x,y,w,h = cv2.boundingRect(cnt)
aspect_ratio = float(w)/h
2.程度
范围是等高线面积与边框面积之比。
area = cv2.contourArea(cnt)
x,y,w,h = cv2.boundingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area
3.坚固性
实体是轮廓面积与凸包面积的比值。
area = cv2.contourArea(cnt)
hull = cv2.convexHull(cnt)
hull_area = cv2.contourArea(hull)
solidity = float(area)/hull_area
4.等效直径
等效直径是面积与等高线面积相同的圆的直径。
area = cv2.contourArea(cnt)
equi_diameter = np.sqrt(4*area/np.pi)
5.定向
方向是物体指向的角度。下面的方法也给出了主轴和小轴的长度。
(x,y),(MA,ma),angle = cv2.fitEllipse(cnt)
6.掩模和像素点
在某些情况下,我们可能需要含该对象的所有点。可以这样做:
mask = np.zeros(imgray.shape,np.uint8)
cv2.drawContours(mask,[cnt],0,255,-1)
pixelpoints = np.transpose(np.nonzero(mask))
#pixelpoints = cv2.findNonZero(mask)
7.最大值、最小值及其位置
我们可以使用掩码图像找到这些参数。
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(imgray,mask = mask)
8.平均颜色或平均强度
在这里,我们可以找到一个物体的平均颜色。也可以是灰度模式下物体的平均强度。我们再次用同样的面具来做这件事。
mean_val = cv2.mean(im,mask = mask)
9.极值点
极值点是指物体的最上面、最底层、最右边和最左边的点。
leftmost = tuple(cnt[cnt[:,:,0].argmin()][0])
rightmost = tuple(cnt[cnt[:,:,0].argmax()][0])
topmost = tuple(cnt[cnt[:,:,1].argmin()][0])
bottommost = tuple(cnt[cnt[:,:,1].argmax()][0])
例如,如果我把它应用到印度地图上,我会得到以下结果: