我想检查OpenCV中的模板匹配

我想检查模板匹配是True还是False。

就像这样:

import cv2 as cvimport numpy as npfrom matplotlib import pyplot as pltimg = 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

感谢回答。


回答:

  1. 获取模板的特征。

  • 图像的特征,如边缘和兴趣点,为图像内容提供了丰富的信息。 来源


  • 例如:如果下面是你的模板,那么找出它的特征。

    enter image description here    enter image description here

     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]
  1. 获取图像的特征。

  • enter image description here   enter image description here
  1. 检查模板特征是否与图像特征匹配。

result = cv2.matchTemplate(edged, template, cv2.TM_CCOEFF)
  • cv2.TM_CCOEFF 只是一个选项,你可以使用许多其他 模板
  1. 查找result变量的最小值和最大值

(_, maxVal, _, maxLoc) = cv2.minMaxLoc(result)
  1. 现在,你可以检查模板匹配是True还是False。

found = (maxVal, maxLoc, r)

因此,如果检测到模板,found变量将返回一个长度为3的元组,这意味着模板匹配成功。例如:

(495.000, (148, 26), 1)
  • 495.000是数组中的最大值。

  • (148, 26)是找到对象的起始(x, y)坐标。

  • 1.0是半径。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注