OpenCV 3

模板匹配方法

尽量采用归一化的方法,因为它更加精细。

匹配效果展示

匹配单一图像

这是一段Python代码,主要使用了OpenCV库进行图像处理。这段代码的主要功能是通过模板匹配方法在一张大图中找到一个小图的位置。

具体来说:

  • 第一行的`for meth in methods:`表示遍历一个包含不同模板匹配方法的列表。

  • `img2 = img.copy()`复制原图像用于后续操作。

  • `method = eval(meth)`将字符串类型的匹配方法转换为Python能够识别的对象。

  • `print (method)`打印当前使用的匹配方法。

  • `res = cv2.matchTemplate(img, template, method)`

调用OpenCV的matchTemplate函数进行模板匹配,其中`img`是大图,`template`是小图,`method`是匹配方法。

  • `min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(res)`

获取匹配结果中的最小值、最大值以及它们对应的位置。

  • 接下来的两行代码根据不同的匹配方法选择位置:

  • 如果是平方差匹配(TM_SQDIFF或TM_SQDIFF_NORMED),取最小值;

  • 否则是最大值。

  • `cv2.rectangle(img2, top_left, bottom_right, 255, 2)`在原图像上画出矩形框,标出小图的位置。

  • 最后几行代码是用来显示匹配结果的:

  • `plt.subplot(121), plt.imshow(res, cmap='gray')`显示匹配结果灰度图;

  • `plt.subplot(122), plt.imshow(img2, cmap='gray')`显示带有标记的小图位置的灰度图;

  • `plt.suptitle(meth)`设置整个图表的标题;

  • `plt.show()`显示图表。

这段代码会循环执行上述步骤,尝试不同的模板匹配方法,并展示每个方法的结果。

将BGR格式的图片转为灰度图

img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)

读取模板图片

template = cv2.imread('mario_coin.jpg', 0)

以上代码首先导入了OpenCV库并读取了两张图片,一张是待搜索的大图('mario.jpg'),另一张是需要在大图中查找的目标模板('mario_coin.jpg')。然后将大图转换为灰度图以便于后续的匹配操作。

获取模板的高度和宽度

h, w = template.shape[:2]

这行代码获取了模板图像的尺寸(高度和宽度),并将它们存储到变量`h`和`w`中。

使用归一化相关系数进行模板匹配

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)

此部分使用OpenCV的`matchTemplate`函数进行模板匹配,该函数接受两个参数:一个是源图像(灰度图),另一个是模板图像。`cv2.TM_CCOEFF_NORMED`是一个预定义常量,代表使用归一化相关系数作为匹配算法。`matchTemplate`函数返回一个二维数组,其中每个元素都表示相应位置与模板的匹配程度。

threshold = 0.8

loc = np.where(res >= threshold)

这里设定一个阈值(`threshold`),只有当匹配程度大于等于该阈值时才会认为找到了匹配项。`np.where(res >= threshold)`返回所有满足条件的坐标索引。

for pt in zip(*loc[::-1]):

*号表示可选参数

bottom_right = (pt[0] + w, pt[1] + h)

cv2.rectangle(img_rgb, pt, bottom_right, (0, 0, 255), 2)

这段代码遍历所有满足条件的坐标点,并绘制一个红色的矩形框以突出显示找到的匹配区域。`zip(*loc[::-1])`将`loc`中的行和列索引反转,使其符合左上角和右下角坐标的顺序。

cv2.imshow('img_rgb', img_rgb)

cv2.waitKey(0)

最后,显示处理后的图像,并等待用户按键退出程序。

总结起来,这段代码的作用是从一张图片中找出多处与另一张图片相似的区域,并在原图上标注出来。

图像金字塔定义 金字塔制作方法

高斯金字塔

向上up 放大图片

向下down 缩小图片

若先放大再缩小,图片不会还是原来的图片,他会变得模糊


拉普拉斯金字塔


这套操作用来将图片1中的东西和图片2匹配出来

相关推荐
跨境猫小妹几秒前
跨境电商深水区:价值增长新范式,重构出海增长逻辑
大数据·人工智能·重构·产品运营·跨境电商·防关联
imbackneverdie1 分钟前
AI工具如何重塑综述写作新体验
数据库·人工智能·考研·自然语言处理·aigc·论文·ai写作
zhaodiandiandian3 分钟前
大模型驱动AI产业化浪潮,全链条突破重塑经济生态
人工智能
这儿有一堆花5 分钟前
将 AI 深度集成到开发环境:Gemini CLI 实用指南
人工智能·ai·ai编程
zhaodiandiandian6 分钟前
从多模态到AI Agent,技术突破引领智能时代新变革
人工智能
l3538o6757310 分钟前
国产POE降压恒压芯片方案选型:48v-52v输入转5v-12v/1-3A电源芯片
人工智能·科技·单片机·嵌入式硬件·电脑·智能家居
迪菲赫尔曼17 分钟前
YAML2ModelGraph【v1.0】:一键生成 Ultralytics 模型结构图
人工智能·yolo·目标检测·yolov5·yolov8·yolo11·结构图
道199319 分钟前
树莓派vsRK3588 对比及无人车集成方案(RTK / 激光雷达 / 云卓 H16)
人工智能
会挠头但不秃20 分钟前
深度学习(5)循环神经网络
人工智能·rnn·深度学习
乐迪信息20 分钟前
乐迪信息:AI摄像机识别煤矿出入井车辆数量异常检测
大数据·运维·人工智能·物联网·安全