opencv模板匹配

NORMED的意思就是结果范围在[-1, 1]之间

cv2.TM_SQDIFF, cv2.TM_SQDIFF_NORMED: `0 为最优,越大越差`,值越小越好

cv2.TM_CCORR, cv2.TM_CCORR_NORMED, cv2.TM_CCOEFF, cv2.TM_CCOEFF_NORMED: `越大越好`

复制代码
如果你使用的是 TM_SQDIFF 方法,那么确实需要使用灰度图像。这是因为 TM_SQDIFF 方法计算的是图像差异的平方和,而不是相关性。在这种情况下,你需要确保模板图像和待匹配图像都是灰度图像,以便正确计算差异。
如果你使用的是其他匹配方法(例如 TM_CCORR 或 TM_CCOEFF),则可以使用彩色图像。这些方法计算的是相关性或相关系数,而不涉及差异的平方和。

cv2.imread 是 OpenCV 中用于从指定文件加载图像的函数。第二个参数 flag 决定了图像的读取方式。在你提供的代码中,参数 0 表示将图像以灰度模式读取。

具体来说,这里的 0 对应以下标志:

  • cv2.IMREAD_GRAYSCALE:它指定以灰度模式加载图像。这意味着图像将被转换为单通道的灰度图像,每个像素的值在 0 到 255 之间,表示图像的亮度。这对于处理灰度图像或进行模板匹配等任务非常有用。

如果你想加载彩色图像,可以使用以下标志之一:

  • cv2.IMREAD_COLOR:加载彩色图像 ,忽略图像的透明度。这是默认标志,也可以用整数值 1 表示。

  • cv2.IMREAD_UNCHANGED:加载图像,包括透明通道 (如果有的话)。这对于处理带有 alpha 通道的图像很有用,也可以用整数值 -1 表示。

    method: TM_SQDIFF, 用minVal

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

    cat = cv2.imread('./aaaa.jpg', 0)
    template = cv2.imread('./template.png', 0)

    th, tw = template.shape[::]

    rv = cv2.matchTemplate(cat, template, cv2.TM_SQDIFF)

    minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(rv)

    topLeft = minLoc
    bottomRight = (topLeft[0] + tw, topLeft[1] + th)
    cv2.rectangle(cat, topLeft, bottomRight, 255, 2)

    plt.subplot(121), plt.imshow(rv, cmap='gray')
    plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
    plt.subplot(122), plt.imshow(cat, cmap='gray')
    plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
    plt.show()

    TM_CCOEFF 方法, 越大越好,用maxVal
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt

    cat = cv2.imread('./cats.jpg', 0)
    template = cv2.imread('./tongue.png', 0)
    tw, th = template.shape[::-1]
    rv = cv2.matchTemplate(cat, template, cv2.TM_CCOEFF)

    minVal, maxVal, minLoc, maxLoc = cv2.minMaxLoc(rv)
    topLeft = maxLoc

    bottomRight = (topLeft[0] + tw, topLeft[1] + th)
    cv2.rectangle(cat, topLeft, bottomRight, 255, 2)

    plt.subplot(121), plt.imshow(rv, cmap='gray')
    plt.title('Matching Result'), plt.xticks([]), plt.yticks([])
    plt.subplot(122), plt.imshow(cat, cmap='gray')
    plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
    plt.show()

相关推荐
AI纪元故事会15 小时前
【计算机视觉目标检测算法对比:R-CNN、YOLO与SSD全面解析】
人工智能·算法·目标检测·计算机视觉
音视频牛哥16 小时前
SmartMediaKit:如何让智能系统早人一步“跟上现实”的时间架构--从实时流媒体到系统智能的演进
人工智能·计算机视觉·音视频·音视频开发·具身智能·十五五规划具身智能·smartmediakit
音视频牛哥17 小时前
超清≠清晰:视频系统里的分辨率陷阱与秩序真相
人工智能·机器学习·计算机视觉·音视频·大牛直播sdk·rtsp播放器rtmp播放器·smartmediakit
CoovallyAIHub21 小时前
突破360°跟踪极限!OmniTrack++:全景MOT新范式,HOTA指标狂飙43%
深度学习·算法·计算机视觉
CoovallyAIHub1 天前
首个大规模、跨模态医学影像编辑数据集,Med-Banana-50K数据集专为医学AI打造(附数据集地址)
深度学习·算法·计算机视觉
LabVIEW开发1 天前
LabVIEW液位边缘检测
图像处理·计算机视觉·labview·labview知识·labview功能·labview程序
诗句藏于尽头1 天前
MediaPipe+OpenCV的python实现交互式贪吃蛇小游戏
人工智能·python·opencv
音视频牛哥1 天前
从云平台到系统内核:SmartMediakit如何重构实时视频系统
计算机视觉·音视频·gb28181对接·rtsp播放器rtmp播放器·smartmediakit·智能机器人低延迟播放方案·rtmp摄像头同屏推流
智驱力人工智能1 天前
智能安全管理 基于视觉分析的玩手机检测系统 手机行为AI模型训练 边缘计算手机行为监测设备
人工智能·安全·目标检测·计算机视觉·智能手机·视觉检测·边缘计算
王哈哈^_^2 天前
【数据集】【YOLO】【目标检测】共享单车数据集,共享单车识别数据集 3596 张,YOLO自行车识别算法实战训推教程。
人工智能·算法·yolo·目标检测·计算机视觉·视觉检测·毕业设计