python opencv 轮廓属性

import cv2
import numpy as np
# .高宽比
img = cv2.imread('zhua.jpg',0)
ret,thresh = cv2.threshold(img,100,255,0)
image,contours,hierarchy = cv2.findContours(thresh, 1, 2)
cnt = contours[0]
# 函数cv2.moments()会给你一个字典,包含所有矩值
M = cv2.moments(cnt)

# 这是目标的边界矩形的宽高比

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

# Extent是轮廓面积和边界矩形面积的比率
area = cv2.contourArea(cnt)
x,y,w,h = cv2.boundingRect(cnt)
rect_area = w*h
extent = float(area)/rect_area
# Solidity

# 是轮廓面积和凸形外壳面积的比率

area = cv2.contourArea(cnt)
hull = cv2.convexHull(cnt)
hull_area = cv2.contourArea(hull)
solidity = float(area)/hull_area
# 等价半径

# 是面积和轮廓面积一样的圆的半径

area=cv2.contourArea(cnt)
equi_diameter=np.sqrt(4*area/np.pi)
# .方向

# 目标的方向角度。下面的方法可以得到长轴和短轴长度

(x,y),(MA,ma),angle=cv2.fitEllipse(cnt)
# 构成目标的所有点
# 这里,两个方法,一个使用Numpy函数,另一个使用OpenCV函数(最后的注释行)达到同样目的。结果也是相同的。
# 不同的一点是Numpy给的坐标是(row, column)格式,而OpenCV给的坐标是(x, y)格式,所以基本上结果可以互相转换。row = x , column = y

mask = np.zeros(imgray.shape,np.uint8)
cv2.drawContours(mask,[cnt],0,255,-1)
pixelpoints = np.transpose(np.nonzero(mask))
#pixelpoints = cv2.findNonZero(mask)

# 最大值,最小值以及他们的位置

min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(imgray,mask=mask)
# 平均颜色和平均强度

# 我们可以得到目标的平均颜色。或者是灰度模式下的平均亮度

mean_val=cv2.mean(im,mask=mask)
# .端点

# 端点表示最高点,最低点,最左和最右点。

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


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值