当前位置:   article > 正文

Opencv第十三章 进阶篇之模板匹配_mn_val, max_val, min_loc, max_loc = cv2.minmaxloc(

mn_val, max_val, min_loc, max_loc = cv2.minmaxloc(res)

模板匹配的原理,是根据平方差或相似系数表示图片的差异。

我们不妨先读进两张图片,其中一张是另一张的一部分截取而成。

  1. img=cv2.imread('E:\Anaconda\Anaconda3.8\QR.jpg',0)
  2. template=cv2.imread('E:\Anaconda\Anaconda3.8\QR_cut.jpg',0)
  3. h,w=template.shape[:2]

接下来,分别读取一下两张图片的shape

 下面需要用到六种不同的模板匹配公式,这里先向大家介绍一下:

TM_SQDIFF 平方差 越小越好
TM_CCORR 相关性 越大越好
TM_CCOOEFF 相关系数 越大越好
TM_SQDIFF_NORMED
TM_CCORR_NORMED
TM_CCOEFF_NORMED
带有NORMED的是进行归一化操作
方法选择时最好选择带有归一化操作的

我们以选取第一种为例来进行代码编写

  1. #规定使用的方法
  2. methods = ['cv2.TM_CCOEFF']
  3. #进行模板匹配
  4. res = cv2.matchTemplate(img,template,1)
  5. #输出模板匹配的结果范围
  6. res.shape
  7. #定义最小值,最大值,最小值取值位置,最大值取值位置
  8. min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(res)
  9. #引用所使用的方法
  10. methods = ['cv2.TM_CCOEFF_NORMED']
  11. for meth in methods:
  12. img2=img.copy()
  13. #eval函数就是实现list、dict、tuple与str之间的转化
  14. method=eval(meth)
  15. #打印所使用的方法
  16. print(method)
  17. #进行模板匹配
  18. res = cv2.matchTemplate(img,template,method)
  19. #定位
  20. min_val,max_val,min_loc,max_loc=cv2.minMaxLoc(res)
  21. #如果是平方差匹配或归一平方差匹配
  22. if method in[cv2.TM_CCOEFF_NORMED] :
  23. top_left = max_loc
  24. # else:
  25. # top_left = max_loc
  26. bottom_right=(top_left[0]+w,top_left[1]+h)
  27. #画矩形
  28. cv2.rectangle(img2,top_left,bottom_right,0,6)
  29. plt.subplot(121),plt.imshow(res,cmap='gray')
  30. plt.xticks([]),plt.yticks([])#隐藏坐标轴
  31. plt.subplot(122),plt.imshow(img2,cmap='gray')
  32. plt.xticks([]),plt.yticks([])#隐藏坐标轴
  33. #矩形标题
  34. plt.suptitle(meth)
  35. plt.show()
  36. cv2.imshow('Little-kiss',img2)
  37. cv2.waitKey(0)
  38. cv2.destroyAllWindows()
  39. cv2.imwrite('E:\Anaconda\Anaconda3.8\Block1.jpg',img2)

其余六种方法,只需要对上述代码进行相应的更改就可以进行运转了。

模板匹配就给大家介绍到这里了,大家下篇文章见。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/79080
推荐阅读
相关标签
  

闽ICP备14008679号