import cv2
o=cv2.imread('C:/Users/xpp/Desktop/Finger.png')#原始图像
cv2.imshow('original',o)
gray=cv2.cvtColor(o,cv2.COLOR_BGR2GRAY)#将彩色图片转换为灰度图
ret,thresh=cv2.threshold(gray,235,255,cv2.THRESH_BINARY)#将灰度图片转换为二值图片
contours,hierarchy=cv2.findContours(thresh,2,1)#计算图像轮廓
for cnt in contours:
hull=cv2.convexHull(cnt)#计算凸包
length=len(hull)
if length>5:
for i in range(length):
cv2.line(gray,tuple(hull[i][0]),tuple(hull[(i+1)%length][0]),(0,0,255),2)#绘制凸包
hull=cv2.convexHull(cnt,returnPoints=False)#计算凸包
defects=cv2.convexityDefects(cnt,hull)#计算凸缺陷
for j in range(defects.shape[0]):#构造凸缺陷
s,e,f,d=defects[j,0]
start=tuple(cnt[s][0])
end=tuple(cnt[e][0])
far=tuple(cnt[f][0])
cv2.line(gray,start,end,[0,0,0],2)#绘制凸缺陷
cv2.circle(gray,far,6,[0,0,0],-1)#绘制凸缺陷
cv2.imshow('result',gray)
cv2.waitKey(0)
cv2.destroyAllWindows()
算法:凸缺陷是图像上的所有凹陷,是图像外轮廓和凸包之间存在的偏差。理解物体形状或轮廓的一种方法便是计算一个物体的凸包,然后计算其凸缺陷。每个缺陷区包含4个特征量:起点、终点、距离和最远点。起点和终点画一条直线,在最远点画个圆,构成凸缺陷区。
convexityDefects=cv2.convexityDefects(contour, convexhull)
注意:参数returnPoints一定是False。
本文分享自 图像处理与模式识别研究所 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有