当前位置: 首页 > news >正文

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

目录

一、模板匹配

1、什么是模版匹配

2、原理

3、应用领域

4、案例实现

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

2)代码实现

运行结果:

二、图像旋转

1、使用numpy方法

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

2、使用OpenCV方法

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

三、综合应用

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

运行结果:

2、匹配步骤


一、模板匹配

1、什么是模版匹配

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

2、原理

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

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

3、应用领域

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

4、案例实现

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

2)代码实现
import cv2
import numpy as npimg_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 npimg = 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 npimg = 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.mrgr.cn/news/23010.html

相关文章:

  • Unity必备:状态机FSM
  • 构建数字产业生态链,共绘数字经济新蓝图
  • 电商平台的仅退款,如何“卷”出一个千亿IPO?
  • 哈希表、算法
  • [快速入门] 使用 MybatisPlus 简化 CRUD 操作
  • 62.以太网数据回环实验(5)
  • 性能测试:Locust使用介绍(一)
  • (六十七)第 10 章 内部排序(快速排序)
  • 【python】数据结构与算法简介及单链表实现
  • 使用Azure+C#+visual studio开发图像目标检测系统
  • Python专项进阶——初步认识Numpy库
  • 控价结果品牌要如何把控
  • MySQl函数
  • JavaWeb(后端)
  • 【C++二分查找】1482. 制作 m 束花所需的最少天数
  • QT接入播放摄像头RTSP流
  • spingboot中创建简单的WebSocket服务和使用OKHttp创建socket客户端接收数据
  • Google AI 概述——喜欢的三点和不喜欢的两点
  • 力扣100题——二分查找
  • [Python学习日记-11] Python中的流程控制(while)