树莓派_Opencv学习笔记23:模版样本匹配

今日继续学习树莓派4B 4G:(Raspberry Pi,简称RPi或RasPi)

本人所用树莓派4B 装载的系统与版本如下:

版本可用命令 (lsb_release -a) 查询:

Opencv 版本是4.5.1:

Python 版本3.7.3:

今日学习Opencv样本模板匹配.....这次的程序比较简单,就不刻意放在树莓派上再验证了...

文章提供测试代码讲解,整体代码贴出、测试效果图

目录

代码贴出:

实验结果:

有关模板匹配的疑问:

模板大小变化会不会影响匹配

模板匹配都要在灰度图下进行吗

网上学习网址贴出:


代码贴出:

这个代码需要俩张图片,一张作为模板,一张作为寻找是否含有模板的母版

这里我是使用扑克牌图片 与 其一部分花纹图片 进行实验

这个代码会框出所有匹配到的部分:

如果你选择了其他图片与模板,出现了漏框现象:

可以试着降低代码第20行设置的阈值(我最初设置的0.8,发现其余匹配到的都框出了,就差最中间的,于是降低到0.7就都框出了)

python 复制代码
import cv2
import numpy as np

# 读取主图像和模版图像
image = cv2.imread('main_image.jpg', 0)  # 0 表示以灰度模式读取
template = cv2.imread('template.jpg', 0)

# 如果图像没有正确加载,则退出
if image is None or template is None:
    print("Error loading images!")
    exit()

# 获取模版的高度和宽度
w, h = template.shape[::-1]

# 执行模版匹配
res = cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED)

# 设置阈值
threshold = 0.7

# 初始化一个空列表来存储匹配到的位置
loc = []

# 找到所有匹配项
for y in range(res.shape[0] - h + 1):
    for x in range(res.shape[1] - w + 1):
        if res[y, x] >= threshold:
            loc.append((x, y))

        # 在原图上标记所有匹配到的位置
for pt in loc:
    cv2.rectangle(image, pt, (pt[0] + w, pt[1] + h), (0, 255, 0), 1)

# 显示结果
cv2.imshow('Detected', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

实验结果:

发现框出的线,有些地方粗,有些细,说明匹配是以像素点为单位 位移过去的,相差不多的位置多次被视作匹配成功,因此需要设定阈值,以免框出过多匹配度不高的部分

有关模板匹配的疑问:

模板大小变化会不会影响匹配

模板大小的变化确实会影响匹配结果。在模版匹配中,模板的尺寸(即宽度和高度)是固定的,它定义了要在原图像中搜索的特定区域的大小和形状。

如果模板的大小发生变化,那么:

  1. 匹配区域:原图像中能够被匹配到的区域将仅限于那些与当前模板尺寸相匹配的区域。如果模板变大了,那么能够匹配到的区域就会减少,因为更大的模板需要更多的相似像素来匹配。相反,如果模板变小了,理论上能够匹配到的区域就会增多,但可能会匹配到一些不太相似的区域,因为小模板对细节的要求较低。

  2. 匹配精度:模板的大小还会影响匹配的精度。较大的模板通常能够捕获更多的图像细节,从而可能提高匹配的准确性,尤其是在图像中目标物体较大且特征明显时。然而,如果目标物体较小或图像中存在大量噪声和干扰,较大的模板可能会降低匹配的准确性,因为它会包含更多的不相关信息。

  3. 计算时间:模板的大小还会影响匹配算法的计算时间。较大的模板意味着需要比较更多的像素,从而导致计算时间增加。

  4. 匹配策略:在某些情况下,你可以使用多尺度模版匹配(也称为金字塔匹配)来应对模板大小变化的问题。这种方法会在不同尺度上(即不同大小)的原图像上执行模版匹配,从而找到最佳匹配位置和尺度。

因此,在选择模板大小时,你需要根据具体的应用场景和目标物体的特性来做出合理的决策。如果你不确定模板的最佳大小,可以尝试使用不同大小的模板进行匹配,并观察匹配结果和计算时间的变化,从而选择最合适的模板大小。

模板匹配都要在灰度图下进行吗

灰度图下进行模板匹配的优势

  1. 简化计算:灰度图像去除了颜色信息,只保留了亮度信息,因此处理的数据量大大减少,使得模板匹配的计算过程更加快速和高效。
  2. 减少干扰:在某些情况下,颜色信息可能会成为干扰因素,影响匹配的准确性。使用灰度图像可以消除这种干扰,使匹配结果更加可靠。

彩色图下进行模板匹配的情况

  1. 颜色信息重要:如果匹配目标依赖于特定的颜色信息,那么在彩色图下进行模板匹配将更为合适。彩色图像能够提供更多维度的信息,有助于提高匹配的准确率。
  2. 特定应用场景:在某些特定应用场景中,如医学图像处理、遥感图像处理等,可能需要保留颜色信息以进行更精确的分析和判断。

综合考虑

因此,是否选择在灰度图下进行模板匹配,需要根据具体的应用场景和需求来决定。如果匹配目标主要依赖于形状、纹理等灰度特征,且颜色信息对匹配结果影响不大,那么在灰度图下进行模板匹配将是一个不错的选择。反之,如果颜色信息对匹配结果至关重要,或者需要在彩色图像中保留更多维度的信息,那么可以考虑在彩色图下进行模板匹配。

总的来说,模板匹配的选择应基于实际应用的需求和图像数据的特性来进行综合考虑。

网上学习网址贴出:

1-模板匹配方法_哔哩哔哩_bilibili

相关推荐
车轮滚滚__25 分钟前
uniapp对接unipush 1.0 ios/android
笔记
云边有个稻草人3 小时前
【优选算法】—复写零(双指针算法)
笔记·算法·双指针算法
冷眼看人间恩怨11 小时前
【Qt笔记】QDockWidget控件详解
c++·笔记·qt·qdockwidget
Hejjon17 小时前
SpringBoot 整合 SQLite 数据库
笔记
西洼工作室19 小时前
【java 正则表达式 笔记】
java·笔记·正则表达式
初学者7.20 小时前
Webpack学习笔记(2)
笔记·学习·webpack
新手上路狂踩坑21 小时前
Android Studio的笔记--BusyBox相关
android·linux·笔记·android studio·busybox
stm 学习ing1 天前
HDLBits训练3
c语言·经验分享·笔记·算法·fpga·eda·verilog hdl
尘觉1 天前
算法的学习笔记—扑克牌顺子(牛客JZ61)
数据结构·笔记·学习·算法
bohu831 天前
sentinel学习笔记1-为什么需要服务降级
笔记·学习·sentinel·滑动窗口