Python-OpenCV中的图像处理-模板匹配

news2024/11/24 5:25:23

Python-OpenCV中的图像处理-模板匹配

  • 模板匹配
    • 单对象的模板匹配
    • 多对象的模板匹配

模板匹配

  • 使用模板匹配可以在一幅图像中查找目标
  • 函数: cv2.matchTemplate(), cv2.minMaxLoc()
  • 模板匹配是用来在一副大图中搜寻查找模版图像位置的方法。 OpenCV 为我们提供了函数: cv2.matchTemplate()。和 2D 卷积一样,它也是用模板图像在输入图像(大图)上滑动,并在每一个位置对模板图像和与其对应的输入图像的子区域进行比较。 OpenCV 提供了几种不同的比较方法(细节请看文档)。返回的结果是一个灰度图像,每一个像素值表示了此区域与模板的匹配程度。
  • 如果输入图像的大小是( WxH),模板的大小是( wxh),输出的结果的大小就是( W-w+1, H-h+1)。当你得到这幅图之后,就可以使用函数cv2.minMaxLoc() 来找到其中的最小值和最大值的位置了。第一个值为矩形左上角的点(位置),( w, h)为 moban 模板矩形的宽和高。这个矩形就是找到的模板区域了。

单对象的模板匹配

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


img = cv2.imread('./resource/opencv/image/messi5.jpg', cv2.IMREAD_GRAYSCALE)
img2 = img.copy()
template = cv2.imread('./resource/opencv/image/messi_face.jpg', cv2.IMREAD_GRAYSCALE)
w,h = template.shape[::-1]

# All the 6 mathods form comparison in a list
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()
    # exec 语句用来执行储存在字符串或文件中的 Python 语句。
    # 例如,我们可以在运行时生成一个包含 Python 代码的字符串,然后使用 exec 语句执行这些语句。
    # eval 语句用来计算存储在字符串中的有效 Python 表达式
    method = eval(meth)

    # Apply template matching
    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)
    
    plt.subplot(121), plt.imshow(res, cmap='gray'), plt.title('Mathing Result'), plt.xticks([]), plt.yticks([])
    plt.subplot(122), plt.imshow(img, cmap='gray'), plt.title('Detected Point'), plt.xticks([]), plt.yticks([])
    plt.suptitle(meth)
    plt.show()

程序原图文件,在一张大图中搜索梅西的面部。
在这里插入图片描述

在这里插入图片描述
程序运行结果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
实测验证 cv2.TM_CCORR 的效果不是太好。

多对象的模板匹配

在前面的部分,我们在图片中搜素梅西的脸,而且梅西只在图片中出现了一次。假如你的目标对象只在图像中出现了很多次怎么办呢?函数cv.minMaxLoc() 只会给出最大值和最小值。此时,我们就要使用阈值了。在下面的例子中我们要经典游戏 Mario 的一张截屏图片中找到其中的硬币。

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

img = cv2.imread('./resource/opencv/image/mario.jpg', cv2.IMREAD_COLOR)
img1 = img.copy()
img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

template = cv2.imread('./resource/opencv/image/mario_coins.jpg', cv2.IMREAD_GRAYSCALE)
w, h = template.shape[::-1]

res = cv2.matchTemplate(img_gray, template, cv2.TM_CCOEFF_NORMED)
print(res.shape)
threshold = 0.8

cv2.imshow('res', res)

# numpy.where(condition[, x, y])
loc = np.where(res >= threshold)

for pt in zip(*loc[::-1]):
    cv2.rectangle(img, pt, (pt[0]+w, pt[1]+h), (0, 0, 255), 1)

cv2.imshow('image',img1)
cv2.imshow('res',res)
cv2.imshow('draw',img)
cv2.waitKey(0)
cv2.destroyAllWindows()

注意:阀值设定要合适,threshold = 0.8
在这里插入图片描述

threshold = 0.95部分金币没有匹配到
在这里插入图片描述
threshold = 0.5
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/868597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Fast SAM与YOLOV8检测模型一起使用实现实例分割

Fast SAM与YOLOV8检测模型一起使用 部分源代码在结尾处可获取 晓理紫 1 使用场景 实例分割数据集的获取要比检测数据的获取更加困难,在已有检测模型不想从新标注分割数据进行训练但是又想获取相关物体的mask信息以便从像素级别对物体进行操作,这时就可以…

【JavaEE进阶】SpringBoot项目的创建

文章目录 一. SpringBoot简介1. 什么是SpringBoot?2. SpringBoot的优点 二. SpringBoot项目创建1. 使用IDEA创建2. 使用网页创建SpringBoot项目 三. 运行SpringBoot项目 一. SpringBoot简介 1. 什么是SpringBoot? Spring Boot 是一个用于快速构建基于 Spring 框架的应用程序…

使用 PyTorch 逐步检测单个对象

一、说明 在对象检测任务中,我们希望找到图像中对象的位置。我们可以搜索一种类型的对象(单对象检测,如本教程所示)或多个对象(多对象检测)。通常,我们使用边界框定义对象的位置。有几种方法可以…

概率论与数理统计:第四章:随机变量的数字特征

文章目录 Ch4. 随机变量的数字特征1. 数学期望E(X)(1)数学期望的概念1.离散型①一维离散型随机变量X的数学期望: E X EX EX②一维离散型随机变量的函数的期望: E [ g ( X ) ] E[g(X)] E[g(X)]③二维离散型随机变量的函数的期望: E [ g ( X , …

基于CentOS 7 部署社区版Haproxy

HAProxy是法国开发者 威利塔罗(Willy Tarreau) 在2000年使用C语言开发的一个开源软件,是一款具 备高并发(一万以上)、高性能的TCP和HTTP负载均衡器,支持基于cookie的持久性,自动故障切换,支 持正则表达式及web状态统计。 目录 1…

23款奔驰AMG GT50升级原厂香氛负离子系统,清香宜人,久闻不腻

奔驰原厂香氛合理性可通过车内空气调节组件营造芳香四溢的怡人氛围。通过更换手套箱内香氛喷雾发生器所用的香水瓶,可轻松选择其他香氛。香氛的浓度和持续时间可调。淡雅的香氛缓缓喷出,并且在关闭后能够立刻散去。车内气味不会永久改变,香氛…

nacos原理

不要纠结于具体代码,随着版本变化源码多变,要学习的是基本原理和思想; Nacos注册中心实现原理分析 Nacos架构图 其中分为这么几个模块: Provider APP:服务提供者。 Consumer APP:服务消费者。 Name Serv…

MiniPaint:在线图像编辑利器【在线PS】

MiniPaint在线图像编辑器使用 HTML5 实现图像的在线创建与编辑,在线PS,支持超过40种效果滤镜,无需本地安装,在很多应用场景中可以替代PhotopShop等传统软件。 访问地址:MiniPaint - 在线PS - 在线图像编辑。 1、打开图…

iOS- git对单个或者多个文件权限设置,使用pre-commit hook 和shell脚本,拦截校验

前提:最近,由于团队代码规范和安全问题,有一些文件只能是指定用户才能修改。 对比:调查了一下资料,发现好多人都在使用pre-commit技术。于是,就朝着这个方向去研究。于是抽空写了脚本,在提交的…

DOS、CMD、PowerShell、Shell 与 Windows (类Unix)Terminal 的区别

在计算机历史的演进中,命令行界面(CLI)始终是一个核心组件,它为用户提供了与计算机系统直接交互的能力。从早期的文本界面到现代的终端,命令行工具已经经历了长足的发展。 本文将深入探讨DOS、CMD、PowerShell、Shell和…

【Unity实战系列】Unity的下载安装以及汉化教程

君兮_的个人主页 即使走的再远,也勿忘启程时的初心 C/C 游戏开发 Hello,米娜桑们,这里是君兮_,怎么说呢,其实这才是我以后真正想写想做的东西,虽然才刚开始,但好歹,我总算是启程了。今天要分享…

阿里云Linux服务器安装FTP站点全流程

阿里云百科分享使用阿里云服务器安装FTP全教程,vsftpd(very secure FTP daemon)是Linux下的一款小巧轻快、安全易用的FTP服务器软件。本教程介绍如何在Linux实例上安装并配置vsftpd。 目录 前提条件 步骤一:安装vsftpd 步骤二…

Js小数运算精度缺失的解决方法

项目场景: 提示:项目需求截图: 问题描述 众所周知Js做运算时0.10.2不等于0.3,目前项目需要计算关于金额的选项,涉及到金额保留后两位。保单欠款是根据用户输入的保单应收和保单欠款自动计算的。 原因分析: 产生浮点数…

《Kubernetes知识篇:常见面试题汇总》

正在不断地完善中,预计1个月的时间完成,覆盖整个Kubernetes知识面总结! 一、概述 1、简述什么是 Kubernetes? kubernetes(常简称k8s),是一个 为容器化应用提供自动化部署、扩展和管理的开源平台…

Scractch3.0_Arduino_ESP32_学习随记_蓝牙键盘(三)

C02蓝牙键盘 目的器材程序联系我们 目的 通过C02实现蓝牙键盘 器材 硬件: 齐护机器人C02 购买地址 软件: scratch3.0 下载地址:官网下载 程序 在P5口连接按钮模块。 蓝牙键盘组合按键动作的实现。 当对应按键按下时模拟键盘动作,先按下ctrl然后按下对应组合键…

Scractch3.0_Arduino_ESP32_学习随记_IO中断(六)

IO中断 目的器材程序联系我们 目的 ESP32 IO中断的使用。 中断: 当IO中断事件发生时,MCU将优先执行中断的程序。 打个比方: 你正在读一本书,突然手机收到一条紧急消息。你不想错过这个重要的消息,所以你立即停下手中的…

【总结】Javaweb和Java项目的比较

🎄欢迎来到边境矢梦的csdn博文🎄 🎄本文主要梳理Javaweb中的关键点和需要注意的地方🎄 🌈我是边境矢梦,一个正在为秋招和算法竞赛做准备的学生🌈 🎆喜欢的朋友可以关注一下&#x1f…

计算机网络核心-数据交换

1 概述 计算机网络的核心即数据交换。通过数据交换将数据从源主机发送到目的主机。 2 为什么需要数据交换 如果不是数据交换的方式,而是每两台主机直接连接,则会产生N^2链路问题。 即,假设有N台主机,两两间建立连接&#xff0c…

STM32F429IGT6使用CubeMX配置外部中断按键

1、硬件电路 2、设置RCC,选择高速外部时钟HSE,时钟设置为180MHz 3、配置GPIO引脚 4、NVIC配置 PC13相同 5、生成工程配置 6、部分代码 中断回调函数 /* USER CODE BEGIN 0 */void HAL_GPIO_EXTI_Callback(uint16_t GPIO_Pin) {if(GPIO_Pin GPIO_PIN_0){HAL_GPIO…

自动测试框架airtest应用二:咪咕爱看能量兑换

一、背景介绍 咪咕爱看是中国移动旗下的一款视频播放软件,可以观看众多电影、电视剧、综艺视频,并且移动环境下观看视频还能获得能量,能量可以兑换流量和消费券。它曾经是一款良心APP,不过经过多年调整,现在大部分电影…