python - 我想检查opencv中的模板是否匹配
问题描述
我想检查模板匹配是真还是假。
就像这样:
import cv2 as cv
import numpy as np
from matplotlib import pyplot as plt
img = cv.imread('messi5.jpg',0)
img2 = img.copy()
template = cv.imread('template.jpg',0)
w, h = template.shape[::-1]
methods = ['cv.TM_CCOEFF', 'cv.TM_CCOEFF_NORMED', 'cv.TM_CCORR',
'cv.TM_CCORR_NORMED', 'cv.TM_SQDIFF', 'cv.TM_SQDIFF_NORMED']
for meth in methods:
img = img2.copy()
method = eval(meth)
res = cv.matchTemplate(img,template,method)
min_val, max_val, min_loc, max_loc = cv.minMaxLoc(res)
if template_match:
//do something
我读过这个但我不明白https://docs.opencv.org/master/d4/dc6/tutorial_py_template_matching.html
感谢您的回答。
解决方案
- 获取模板的功能。
-
图像特征,例如边缘和兴趣点,提供了关于图像内容的丰富信息。资源
例如:如果下面是你的模板,那么找到它的特征。
import numpy as np import imutils import glob import cv2 template = cv2.imread("template.jpg") template = cv2.cvtColor(template, cv2.COLOR_BGR2GRAY) template = cv2.Canny(template, 50, 200) (h, w) = template.shape[:2]
- 获取图像的特征。
- 检查模板特征是否与图像特征匹配。
result = cv2.matchTemplate(edged, template, cv2.TM_CCOEFF)
cv2.TM_CCOEFF
只是一个选项,您可以使用许多其他模板
result
找出变量的最小值和最大值
(_, maxVal, _, maxLoc) = cv2.minMaxLoc(result)
- 现在,您可以检查模板匹配是真还是假。
found = (maxVal, maxLoc, r)
因此,如果检测到模板,则found
变量返回长度为 3 的元组,这意味着模板匹配。例如:
(495.000, (148, 26), 1)
495.000 是数组中的最大值。
(148, 26) 是
(x, y)
找到对象的起始坐标。1.0 是半径。
推荐阅读
- javascript - 覆盖 javascript 文件 (summernote.js) 中的一些函数
- c++ - C++ 中的 inData.open 和 inData.close
- selenium-webdriver - 如何在脚本(Appium)中自动将apk文件从本地路径上传到android模拟器?
- javascript - grunt jshint 要求将 esversion 设置为 6,即使它设置为更大
- node.js - 从前端停止节点服务器中的功能
- java - Can Stream's SKIP method making an infinite stream finite?
- javascript - 如何验证csv文件在php中有一个空行?
- wildfly - 当数据源不可用时,Wildfly 不会部署
- android - Android ListView 项目选择器不起作用
- react-native - react-native 中的 flow 和 eslint 有什么区别?我应该使用哪一个?我可以同时使用吗?