python 模板匹配对比

对于形变,以下两种 相关系数的效果比较好:

cv2.TM_CCOEFF
cv2.TM_CCOEFF_NORMED

其余四种会误检。

 

  • 平方差匹配CV_TM_SQDIFF:用两者的平方差来匹配,最好的匹配值为0
  • 归一化平方差匹配CV_TM_SQDIFF_NORMED
  • 相关匹配CV_TM_CCORR:用两者的乘积匹配,数值越大表明匹配程度越好
  • 归一化相关匹配CV_TM_CCORR_NORMED
  • 相关系数匹配CV_TM_CCOEFF:用两者的相关系数匹配,1表示完美的匹配,-1表示最差的匹配
  • 归一化相关系数匹配CV_TM_CCOEFF_NORMED

 

# -*- coding:utf-8 -*-
__author__ = 'Microcosm'

import cv2
import numpy as np
from matplotlib import pyplot as plt


img = cv2.imread(r"e:/new/n3.jpg",0)

template = cv2.imread(r"e:/new/muban3.jpg",0)

img2 = img.copy()
w,h = template.shape[::-1]

# 6 中匹配效果对比算法
methods = ['cv2.TM_CCOEFF', 'cv2.TM_CCOEFF_NORMED', 'cv2.TM_CCORR',
           'cv2.TM_CCORR_NORMED', 'cv2.TM_SQDIFF', 'cv2.TM_SQDIFF_NORMED']

for meth in methods:
    img = img2.copy()

    method = eval(meth)

    res = cv2.matchTemplate(img,template,method)
    min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)

    if method in [cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED]:
        top_left = min_loc
    else:
        top_left = max_loc
    bottom_right = (top_left[0] + w, top_left[1] + h)

    cv2.rectangle(img,top_left, bottom_right, 255, 2)

    cv2.imshow("Point",img)
    cv2.imshow("Matching Result",res)
    cv2.waitKeyEx()
    print(meth)
    # plt.subplot(221), plt.imshow(img2,cmap= "gray")
    # plt.title('Original Image'), plt.xticks([]),plt.yticks([])
    # plt.subplot(222), plt.imshow(template,cmap= "gray")
    # plt.title('template Image'),plt.xticks([]),plt.yticks([])
    # plt.subplot(121), plt.imshow(res,cmap= "gray")
    # plt.title('Matching Result'), plt.xticks([]),plt.yticks([])
    # plt.subplot(122), plt.imshow(img,cmap= "gray")
    # plt.title('Detected Point'),plt.xticks([]),plt.yticks([])
    # plt.show()

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Python中的模板匹配可以使用OpenCV库来实现,以下是一个简单的示例代码: ```python import cv2 # 读取原始图像和模板图像 img = cv2.imread('original_image.jpg') template = cv2.imread('template_image.jpg') # 获取模板图像的宽度和高度 w, h = template.shape[1], template.shape[0] # 进行模板匹配 result = cv2.matchTemplate(img, template, cv2.TM_CCOEFF_NORMED) # 获取匹配结果中的最大值及其位置 min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(result) # 在原始图像中框出匹配的区域 top_left = max_loc bottom_right = (top_left[0] + w, top_left[1] + h) cv2.rectangle(img, top_left, bottom_right, (0, 0, 255), 2) # 显示匹配结果 cv2.imshow('Result', img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 在上述代码中,我们首先使用`cv2.imread`函数读取原始图像和模板图像,然后使用`cv2.matchTemplate`函数进行模板匹配,得到匹配结果。接着,我们使用`cv2.minMaxLoc`函数获取匹配结果中的最大值及其位置,然后使用`cv2.rectangle`函数在原始图像中框出匹配的区域。最后,我们使用`cv2.imshow`函数显示匹配结果,并使用`cv2.waitKey`和`cv2.destroyAllWindows`函数等待用户按下键盘,然后关闭窗口。 需要注意的是,模板匹配算法对光照和旋转等变化比较敏感,因此在实际应用中需要结合其他算法进行综合处理。 ### 回答2: Python模板匹配是一种在图像处理中常用的技术,用于识别图像中与给定模板相似的区域。它的工作原理是将模板图像与目标图像进行比较,并找到最佳匹配的位置。 实现模板匹配的步骤如下: 1. 导入必要的库:首先,我们需要导入OpenCV库和NumPy库来进行图像处理和数组操作。 2. 加载图像:使用OpenCV的imread函数加载目标图像和模板图像。 3. 确定模板大小:获取模板图像的大小,以便在目标图像中进行滑动窗口操作。可以使用模板图像的shape属性来获取宽度和高度。 4. 进行模板匹配:使用OpenCV的matchTemplate函数在目标图像上进行模板匹配。此函数将模板图像作为输入,并在目标图像上进行滑动窗口操作,计算每个窗口与模板的匹配程度。常用的匹配方法有平方差匹配、相关性匹配和归一化互相关匹配。 5. 获取匹配结果:使用OpenCV的minMaxLoc函数获取最佳匹配的位置。该函数将返回匹配程度最高(或最低)的可能性值和对应的位置。 6. 绘制匹配结果:使用OpenCV的rectangle函数在目标图像上绘制矩形框来标记模板匹配的位置。 7. 显示图像结果:使用OpenCV的imshow函数显示目标图像和标记完匹配位置的图像。 通过以上步骤,就可以实现Python模板匹配模板匹配在许多领域有广泛的应用,如目标检测、人脸识别、文本识别等。它可以帮助我们在图像中寻找特定的目标或形状,提供了一种简便可靠的图像处理工具。 ### 回答3: Python模板匹配是一种基于图像处理的技术,用于在图像中查找特定的模板或图案。这种技术可以应用于许多领域,如计算机视觉、医学影像分析、安防监控等。 模板匹配的基本原理是通过对比模板图像与目标图像中的每个局部区域进行相似性度量,从而找到匹配度最高的位置。这个相似性度量可以采用像素级的比较,也可以采用基于特征的方法,如SIFT、SURF等。 在Python中,可以使用OpenCV库来实现模板匹配。首先,我们需要读取模板图像和目标图像,并将其转换为灰度图像。然后,使用OpenCV的模板匹配函数(如cv2.matchTemplate)来对比模板和目标图像,并得到匹配结果。匹配结果是一个矩阵,其中每个像素表示该位置与模板的匹配程度。 接下来,我们可以在匹配结果中找到最佳匹配位置。通常,我们会使用阈值来确定匹配的阈值,只有匹配程度高于阈值的区域才被认为是有效的匹配。一种常用的方法是使用cv2.minMaxLoc函数来找到匹配程度最高的位置。 最后,我们可以将匹配结果可视化,并在目标图像中标记出匹配的位置。这可以通过在目标图像上绘制矩形框来实现,该矩形框的位置由最佳匹配位置和模板的大小确定。 总的来说,Python模板匹配提供了一种简单而有效的方法来在图像中查找特定的模板或图案。通过使用OpenCV库,我们可以实现模板匹配,并在目标图像中标记出匹配的位置,为后续的图像处理任务提供有用的信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值