python-opencv Tutorials 一码人翻译(21)图像处理----轮廓检测 --缺陷检测和图形匹配

目标

在这一章中,我们将学习

凸性缺陷及如何找到它们。

从一个点到一个多边形的最短距离

匹配不同的形状

理论和代码

1。凸性缺陷

我们在第二章中看到了凸壳的轮廓。物体与该船体的任何偏差都可以被认为是凸性缺陷。

OpenCV有一个现成的函数来找到这个,cv.convexityDefects().。一个基本的函数调用如下所示:

import cv2 as cv
import numpy as np

img = cv.imread('tu.jpg')
img_gray = cv.cvtColor(img,cv.COLOR_BGR2GRAY)
ret,thresh = cv.threshold(img_gray, 127, 255,0)
im2,contours,hierarchy = cv.findContours(thresh,2,1)
cnt = contours[0]


hull = cv.convexHull(cnt,returnPoints = False)
defects = cv.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])
    cv.line(img,start,end,[0,255,0],5)
    cv.circle(img,far,4,[0,0,255],-1)





cv.imshow('img',img)
cv.waitKey(0)
cv.destroyAllWindows()

2。多边形点测试
这个函数找到图像中点和等值线之间的最短距离。当点在等值线外时,它返回的距离是负的,当点在里面的时候是正的,如果点在等高线上,则为0。
例如,我们可以检查这个点(50,50),如下所列:主义者=cv.pointPolygonTest(cnt,(50,50),True)
在这个函数中,第三个参数是测量。如果它是真的,它会找到已签名的距离。如果是假的,它会发现这个点是在里面还是在外面,或者在等高线上(它分别返回+1、-1、0)。

3。匹配的形状

OpenCV有一个函数cv.matchShapes() ,它使我们能够比较两个形状,或者两个轮廓,并返回一个显示相似度的度量。结果越低,就越匹配。它是基于hu-力矩值计算的。在文档中解释了不同的测量方法。

import cv2 as cv
import numpy as np

img1 = cv.imread('tu.jpg',0)
img2 = cv.imread('bing.png',0)

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

ret = cv.matchShapes(cnt1,cnt2,1,0.0)
print( ret )

================= RESTART: C:\Users\ty\Desktop\qwe\teas11.py =================
0.0448651381606871
>>> 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值