官网参见https://docs.opencv.org/3.4.1/d5/d45/tutorial_py_contours_more_functions.html
1.凸缺陷
我们已经了解过凸包概念https://blog.youkuaiyun.com/weixin_42555985/article/details/97115338。
物体和凸包之间的任何偏差就称为凸缺陷。
opencv提供cv.convexityDefects()函数找到凸缺陷。
调用方式如下:
hull = cv.convexHull(cnt,returnPoints = False)
defects = cv.convexityDefects(cnt,hull)
cv.convexHull()函数获取凸包,其中cnt是利用cv2.findContours()函数获取的轮廓。
cv.convexityDefects()函数就是把cnt轮廓和hull凸包进行比较,获得凸缺陷。
为了找到凸缺陷,convexHull()函数必须传入returnPoints = False
函数返回一个数组,每一行包含的值是:起始点,终点,最远的点,最远点的近似距离。我们可以在图像中显示它。起点和终点画一根直线,然后在最远的点画个圆。
注意:返回值是轮廓的索引点,可以在cnt中找到对应的值。
例,找到凸缺陷
# -*- coding: cp936 -*-
import cv2
import numpy as np
from matplotlib import pyplot as plt
img = cv2.imread('defects.jpg')
img_gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(img_gray, 127, 255,0)
im2,contours,hierarchy = cv2.findCo