OpenCV轮廓特性

 

在这里,我们将学习提取一些常用的性质的物体,如固体,等效直径,面具图像,平均强度等。

1.纵横比

它是物体的宽度与高度的比值。

Aspect \; Ratio = \frac{Width}{Height}

x,y,w,h = cv2.boundingRect(cnt)
aspect_ratio = float(w)/h

2.程度

范围是等高线面积与边框面积之比。

Extent = \frac{Object \; Area}{Bounding \; Rectangle \; Area}

area = cv2.contourArea(cnt)
x,y,w,h = cv2.boundingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area

3.坚固性

实体是轮廓面积与凸包面积的比值。

Solidity = \frac{Contour \; Area}{Convex \; Hull \; Area}

area = cv2.contourArea(cnt)
hull = cv2.convexHull(cnt)
hull_area = cv2.contourArea(hull)
solidity = float(area)/hull_area

4.等效直径

等效直径是面积与等高线面积相同的圆的直径。

Equivalent \; Diameter = \sqrt{\frac{4 \times Contour \; Area}{\pi}}

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])

例如,如果我把它应用到印度地图上,我会得到以下结果:

Extreme Points

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值