轮廓检测
#先转化为二值图
img = cv2.imread(name)
gray = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
ret,thresh = cv2.threshold(gray,127,255,cv2.THRESH_BINARY)
cv2.findContours(img,mode,method)
mode取值:
CV_RETR_EXTERNAL:只检测最外围轮廓,包含在外围轮廓内的内围轮廓被忽略
CV_RETR_LIST :检测所有的轮廓,包括内围、外围轮廓,但是检测到的轮廓不建立等级关系,彼此之间独立,没有等级关系,这就意味着这个检索模式下不存在父轮廓或内嵌轮廓
CV_RETR_CCOMP :检测所有的轮廓,但所有轮廓只建立两个等级关系,外围为顶层,若外围内的内围轮廓还包含了其他的轮廓信息,则内围内的所有轮廓均归属于顶层
CV_RETR_TREE :检测所有轮廓,所有轮廓建立一个等级树结构。外层轮廓包含内层轮廓,内层轮廓还可以继续包含内嵌轮廓。
method取值:
CV_CHAIN_APPROX_NONE 保存物体边界上所有连续的轮廓点到contours向量
CV_CHAIN_APPROX_SIMPLE 仅保存轮廓的拐点信息,把所有轮廓拐点处的点保存入contours向量内,拐点与拐点之间直线段上的信息点不予保留
模板匹配
与卷积原理相似,模板在原图上从原点开始滑动,计算模板与原图的差异程度,计算方法有6种,将每次计算结果放入一个矩阵,作为结果,若原图大小AB,模板ab,输出结果矩阵大小为(A-a+1)*(B-b+1)
res = cv2.matchTemplate(img,template,method)
cv2.TM_SQDIFF | 平方差匹配,值越小匹配度越高。 |
---|---|
cv2.TM_SQDIFF_NORMED | 归一化平方差匹配,值越小匹配度越高。 |
cv2.TM_CCORR | 相关匹配,值越大匹配度越高。 |
cv2.TM_CCORR_NORMED | 归一化相关匹配,值越大匹配度越高。 |
cv2.TM_CCOEFF | 相关系数匹配,值越大匹配度越高。 |
cv2.TM_CCOEFF_NORMED | 归一化相关系数匹配,值越大匹配度越高。 |