• 欢迎访问开心洋葱网站,在线教程,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站,欢迎加入开心洋葱 QQ群
  • 为方便开心洋葱网用户,开心洋葱官网已经开启复制功能!
  • 欢迎访问开心洋葱网站,手机也能访问哦~欢迎加入开心洋葱多维思维学习平台 QQ群
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏开心洋葱吧~~~~~~~~~~~~~!
  • 由于近期流量激增,小站的ECS没能经的起亲们的访问,本站依然没有盈利,如果各位看如果觉着文字不错,还请看官给小站打个赏~~~~~~~~~~~~~!

(Python)从零开始,简单快速学机器仿人视觉Opencv—第十九节:关于轮廓的函数

人工智能 Eragonl 1624次浏览 0个评论

1 凸缺陷

  找到凸缺陷  

hull=cv2.convexHull(cnt,returnPoints=False)
defects=cv2.convexityDefects(cnt,hull)

  它会返回一个数组,其中每一行包含的值是【起点,终点,最远的点,到最远点的近似距离】  

import cv2
import numpy as np
img=cv2.imread('0023.jpg')
img_gray=cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh=cv2.threshold(img_gray,127,255,0)
contours=cv2.findContours(thresh,2,1)
hierarchy = cv2.findContours(thresh,2,1)
cnt=contours[0]

hull=cv2.convexHull(cnt,returnPoints=False)
defects=cv2.convexityDefects(cnt,hull)

for i in range(defects.shape[0]):
    s,e,f,d=defects[i,0]
    start=tuple(cnt[s][0])
    end=tuple(cnt[e][0])
    far=tuple(cnt[f][0])
    cv2.line(img,start,end,[0,255,0],2)
    cv2.circle(img,far,5,[0,0,255],-1)
while(1):
    cv2.imshow('img',img)
    if cv2.waitKey(1)==ord('q'):
        break
cv2.destroyAllWindows()

 

2.Point Polygon Test

  求解图像中的一个点到一个对象轮廓的最短距离。如果点再轮廓的外部,返回值为负,如果在轮廓上,返回值为0,如果在轮廓内部,返回值为正。   下面我们以点(50,50)为例:  

dist = cv2.pointPolygonTest(cnt,(50,50),True)

  此函数的第三个参数是measureDist。如果设置为True,就会计算最短距离。如果是False,只会判断这个点与轮廓之间的位置关系(返回值为+1,-1,0)  

3.形状匹配

  函数cv2.matchShape()可以帮我们比较两个形状或者轮廓的相似度,如果返回值越小,匹配越好,它是根据Hu矩来计算的。  

import cv2
import numpy as np

img1 = cv2.imread('roi.jpg')
img2 = cv2.imread('0022.jpg')

ret,thresh=cv2.threshold(img1,127,255,0)
ret,thresh2=cv2.threshold(img2,127,255,0)
contours,hierarchy =cv2.findContours(thresh,2,1)
cnt1=contours[0]
contours,hierarchy =cv2.findContours(thresh2,2,1)
cnt2=contours[0]
ret=cv2.matchShapes(cnt1,cnt2,1,0,0)
print(ret)

 

总结

(本系列每周不定期更新,谢谢大家支持!)


开心洋葱 , 版权所有丨如未注明 , 均为原创丨未经授权请勿修改 , 转载请注明(Python)从零开始,简单快速学机器仿人视觉Opencv—第十九节:关于轮廓的函数
喜欢 (0)

您必须 登录 才能发表评论!

加载中……