《深度学习》OpenCV 模版匹配多个对象、图片旋转 综合应用

news2024/12/23 22:47:47

目录

一、模板匹配

1、什么是模版匹配

2、原理

3、应用领域

4、案例实现

1)模版图片和输入图片信息

2)代码实现

运行结果:

二、图像旋转

1、使用numpy方法

运行结果:  (图片来源网络,如有侵权敬请联系删除。)

2、使用OpenCV方法

运行结果: (图片来源网络,如有侵权敬请联系删除。)

三、综合应用

1、识别输入图片中所有模版图

运行结果:

2、匹配步骤


一、模板匹配

1、什么是模版匹配

        模板匹配是OpenCV中的一种图像处理技术,用于在一幅图像中查找与给定模板或样本图像最相似的区域。

2、原理

        通过在输入图像中滑动模板图像,并计算模板与输入图像相应区域的相似度,找出最匹配的位置。相似度可以使用不同的度量方式来计算,最常用的是平方差匹配相关性匹配

        在模板匹配中,模板图像是由用户提供的一个小图像,用于指示需要在输入图像中查找的目标物体或特征。输入图像可以是任意大小的图像,而模板图像通常要比输入图像小。

3、应用领域

        模板匹配计算机视觉和图像处理中有广泛的应用,例如目标检测、图像识别、物体跟踪等。它是一种简单但有效的图像处理方法,可以用于自动化的图像分析和图像理解任务。

4、案例实现

1)模版图片和输入图片信息

2)代码实现
import cv2
import numpy as np

img_rgb = cv2.imread('image.jpg')
img_gray = cv2.cvtColor(img_rgb,cv2.COLOR_RGB2GRAY)   # 将输入图片转换为灰度图
template = cv2.imread('tem.jpg',0)   # 导入模版图片的灰度图
h,w = template.shape[:2]  # shape返回图片的高、宽、通道

# 使用模板匹配方法 cv2.matchTemplate 进行匹配
res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)  # cv2.TM_CCOEFF_NORMED表示使用归一化的方法来匹配,返回每个点匹配的相似度,DF类型

# 设定匹配阈值,表示匹配的相似度范围
threshold = 0.9
# 获取匹配结果中所有符合阈值的点的坐标
loc = np.where(res >= threshold)  # 返回索引,这里返回的是y值和x值坐标信息,条件为大于设定阈值的值的索引

for pt in zip(*loc[::-1]):   # loc数据倒序排列,变成x,y顺序状态,zip(*)表示将可迭代对象中对应的元素打包成一个元组,这里表示返回每个点的坐标
    # 在原图上绘制匹配区域的矩形框,pt表示矩形左上角坐标,(pt[0]+w,pt[1]+h)表示右下角坐标
    cv2.rectangle(img_rgb,pt,(pt[0]+w,pt[1]+h),(0,0,255),1)

cv2.imshow('res_show',img_rgb)
cv2.waitKey(0)
运行结果:

        此时相似的图像匹配完成,但是仍然还有一些相同图像不同方向的没有匹配上,需要对模型进行剩下的处理。

二、图像旋转

1、使用numpy方法

import cv2
import numpy as np

img = cv2.imread('girl3.jpg')

"""使用numpy旋转"""
# 旋转90度,k=-1表示顺时针90
rotated_image1 = np.rot90(img,-1)   # k值表示逆时针旋转几个90度,如果为负值则反向旋转几个90度
# k=1表示逆时针旋转
rotated_image2 = np.rot90(img,1)

cv2.imshow('yuamtu',img)
cv2.waitKey()
cv2.imshow('rotated_image1',rotated_image1)
cv2.imshow('rotated_image2',rotated_image2)
cv2.waitKey(0)
运行结果:  (图片来源网络,如有侵权敬请联系删除。)

2、使用OpenCV方法

img = cv2.imread('girl3.jpg')
rotated_image = cv2.rotate(img,cv2.ROTATE_90_CLOCKWISE)  # 顺时针90度
rotated_image1 = cv2.rotate(img,cv2.ROTATE_90_COUNTERCLOCKWISE)  # 逆时针90度
rotated_image2 = cv2.rotate(img,cv2.ROTATE_180)  # 旋转180度
cv2.imshow('shun90',rotated_image)
cv2.imshow('ni90',rotated_image1)
cv2.imshow('180',rotated_image2)
cv2.waitKey(0)
运行结果: (图片来源网络,如有侵权敬请联系删除。)

三、综合应用

1、识别输入图片中所有模版图

import cv2
import numpy as np

img = cv2.imread('image.jpg')  # 读取原图
tem = cv2.imread('tem.jpg',0)  # 读取模型图,灰度图

img_gray = cv2.cvtColor(img,cv2.COLOR_RGB2GRAY)  # 原图转换为灰度图

for i in [0,1,2,3]:   # 遍历四个值,表示逆时针旋转几个90度
    template = np.rot90(tem,i)   # 旋转i个90度,得到一个新的模版图像
    h,w = template.shape[:2]   # 返回模版图像的高宽

    # 使用模板匹配方法 cv2.matchTemplate 进行匹配
    res = cv2.matchTemplate(img_gray,template,cv2.TM_CCOEFF_NORMED)

    # 设定匹配阈值
    threshold = 0.9
    # 获取匹配结果中所有符合阈值的点的坐标
    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('res_show',img)
cv2.waitKey(0)
运行结果:

2、匹配步骤

  1. 首先,通过cv2.imread函数读取原图和模板图像,并将模板图像转换成灰度图像(cv2.cvtColor函数)。

  2. 然后,使用循环遍历四个不同的旋转角度(0度、90度、180度、270度)。对于每个角度,通过np.rot90函数对模板图像进行旋转得到新的模板图像,同时获取模板图像的高度和宽度。

  3. 使用模板匹配函数 cv2.matchTemplate 来计算原图和旋转后的模板图像之间的相似度。这里采用的匹配方法是 cv2.TM_CCOEFF_NORMED

  4. 设定匹配阈值,只有相似度大于等于阈值的部分才认为是匹配的。

  5. 使用 np.where 函数获取所有符合阈值的点的坐标。

  6. 遍历所有的匹配点,对于每个点,使用 cv2.rectangle 函数在原图上绘制一个矩形框,将匹配区域标记出来。

  7. 最后,通过 cv2.imshow 和 cv2.waitKey 函数展示结果图像,并等待按键关闭窗口。

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

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

相关文章

ORBSLAM2三维重建后上下颠倒

调整 Z 坐标的符号,将d改为-d 引用文献 https://blog.csdn.net/qq_42450767/article/details/114144439

【技术调研】三维(1)-ThreeJs-基础常识及第一个程序

前言 ​ 公司有网页三维以及客户端、vr三维相关项目机会,需要对相关技术进行调研,进行项目可行性评估和大致成本评估。基于此对三维一些内容进行调研。 什么是three.js ​ Three.js是一款基于原生WebGL封装通用Web 3D引擎。由于前文已经了解过webGL,知道通过webGL的API我…

人工智能技术导论——基于产生式规则的机器推理

在引出本章的内容之前先介绍一个概念 知识 知识的概念 知识(Knowledge)是人们在改造客观世界的实践中形成的对客观事物(包括自然的和人造的)及其规律的认识,包括对事物的现象、本质、状态、关系、联系和运动等的认识…

大数据技术体系架构

数据源 社交媒体平台 云平台 网站资源 物联网(IOT) 数据库 特点 分布式 数据源一般分布在不同的设备上,这些设备通常由网络连接在一起,网络空间的安全及其重要; 异构性 数据的来源广泛,比如社交媒…

Qt常用控件——QRadioButton和QCheckBox

文章目录 QRadioButtonQAbstractButton信号实现简单的点餐页面QCheckBox QRadioButton QRadioButton是单选按钮,可以让我们在多个选项当中选择一个 作为QAbstractButton和QWidget的子类,它们的属性和语法,对于QRadioButton同样适用 QAbstrac…

springboot+vue+mybatis计算机毕业设计医护系统的设计与实现+PPT+论文+讲解+售后

近些年来,随着科技的飞速发展,互联网的普及逐渐延伸到各行各业中,给人们生活带来了十分的便利,医护系统的设计与实现利用计算机网络实现信息化管理,使整个医护系统的发展和服务水平有显著提升。 本文拟采用Eclipse开发…

【尚跑】2024陕西淳化天然氧吧半程马拉松赛149顺利完赛

1、赛事背景 奔跑美丽淳化,畅游天然氧吧。9月8日上午,2024淳化天然氧吧半程马拉松赛在淳化县润镇东街鸣枪开跑,4000名马拉松爱好者相聚美丽淳化,赏荞麦花海、闻硕果飘香,共同开启这场挑战自我、超越极限的奔跑之旅 本次…

EasyRecovery破解版下载无需注册,easyrecovery数据恢复软件免费版激活码密钥

EasyRecovery易恢复是一款功能强大的数据恢复软件,为无数人群解决了数据丢失的烦恼,为工作生活带去了便捷。无数使用者在使用过后,都肯定了其强大的数据恢复功能。具体来说,EasyRecovery易恢复可以恢复多方面的数据,Ea…

如何规避SQL注入漏洞

1 引言 对于很多初学者而言,SQL注入攻击是一种很容易被忽略的安全漏洞,其原理很简单,在日常编码中需要注意规避,养成良好的系统安全意识。 2 原理 SQL注入漏洞产生的根本原因,就是在编码过程中手动拼接sql参数造成的…

os模块函数

1、常用命令 os.getcwd() 返回当前工作目录 os.listdir() 返回指定文件路径下的文件夹列表或者文件列表 os.mkdir 创建文件夹,不能创建递归文件夹,也就是上一层文件夹必须存在,不存在时会报错,同时在指定目录下有相同的文件夹名称,再创建会报错 os.makedirs 可以创建…

[基于 Vue CLI 5 + Vue 3 + Ant Design Vue 3 搭建项目] 01 安装 nodejs 环境

文章目录 下载安装测试 这里让我们去看看如何安装一下 nodejs 的环境 下载 通过官网进行下载安装包 官网 https://nodejs.org/zh-cn点击 下载 Node.js (LTS) 开始下载 安装 下载完成之后,双击进行安装 开始进行安装了 这样,node.js 就安装好了 测试 …

计算机毕业设计 | springboot旅行旅游网站管理系统(附源码)

1,绪论 1.1 背景分析 随着人们生活水平的提高和对休闲旅游的日益重视,旅游业已成为全球最大的经济产业之一。越来越多的人选择通过在线方式进行旅行预订,这种趋势为旅游网站提供了巨大的商机。用户体验是决定旅游网站成功与否的关键因素。良…

TD综合教程——粒子切换和音轮(附思路和工程文件)

一、粒子切换 整体思路: 给constant中的color实时滑条数值但是没有变化 解决办法:在这里使用的rgb不是0-255的色域,而是0-20,使用Math CHOP改变即可 二、音轮 整体思路: 在math中输入双声道音频后,可以使…

WinCC V7.5与S7-1200 PLC 通信

自WinCC V7.2版本起,软件新增加了 "SIMATIC S7-1200, S7-1500 Channel"通道,用于WinCC与 S7-1200/S7-1500 PLC之间的通信。此驱动只支持以太网通讯,使用 TCP/IP 协议。 工控人加入PLC工业自动化精英社群 文档示例的软/硬件环境硬件&#xff1…

QLORA:高效微调量化大型语言模型

人工智能咨询培训老师叶梓 转载标明出处 传统的16位精度微调需要超过780GB的GPU内存,对于参数量极大的模型,如65B(即650亿参数)的模型,在资源有限的情况下大模型的微调几乎是不可能的。华盛顿大学的研究者团队提出了一…

您的计算机已被.rmallox、.hmallox勒索病毒感染?恢复您的数据的方法在这里!

导言 近年来,勒索病毒攻击手段不断升级,其中双重勒索策略更是成为了攻击者们的“新宠”。这种策略不仅通过加密受害者的文件来要求赎金,还进一步威胁要泄露或公开其敏感数据,实现了对受害者的双重打击。面对如此严峻的网络安全形…

[ubuntu]opencv4.9.0源码编译报错undefined reference to ‘TIFFReadRGBxxxxx‘及解决方法

今天在编译Opencv4.89.0的时候报了上面这个错误,原因是和anaconda环境冲突,因为此时是在激活的conda环境下编译的。 解决方法:conda deactivate 关闭conda环境,再进行编译,就OK了。记得要删除build缓存重新cmake然后ma…

【OpenCV-直方图与傅里叶变换】图像的基本变换、傅里叶变换、直方图

import cv2 #opencv读取的格式是BGR import numpy as np import matplotlib.pyplot as plt#Matplotlib是RGB %matplotlib inline def cv_show(img,name):cv2.imshow(name,img)cv2.waitKey()cv2.destroyAllWindows()1 直方图 1.1 cv2.calcHist(images,channels,mask,histSize,ra…

浪潮信息:构建高效、安全数据存储底座的领航者

浪潮信息在最新IDC发布的《中国企业级外部存储市场跟踪报告,2024Q1》中表现抢眼,以11.4%的市场销售额占比稳居中国存储市场第二,同比增长率高达13.6%,领跑头部厂商。这标志着浪潮信息在推动中国存储市场持续增长中扮演了关键角色&…

智能语音技术在人机交互中的应用与发展

摘要:本文主要探讨智能自动语音识别技术与语音合成技术在构建智能口语系统方面的作用。这两项技术实现了人机语音通信,建立起能听能说的智能口语系统。同时,引入开源 AI 智能名片小程序,分析其在智能语音技术应用场景下的意义与发…