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

opencv学习:图像旋转的两种方法,旋转后的图片进行模板匹配代码实现

图像旋转

在图像处理中,rotaterot90 是两种常见的图像旋转方法,它们在功能和使用上有一些区别。下面我将分别介绍这两种方法,并解释它们的主要区别

rot90 方法

rot90 方法是 NumPy 提供的一种数组旋转函数,它主要用于对二维数组(如图像)进行90度的旋转。这个方法比较简单,只支持90度的倍数旋转,不支持任意角度旋转。

使用NumPy进行旋转

使用NumPy的 rot90 函数对模板图像进行旋转操作。

  • 逆时针旋转90度
  • rotat2=np.rot90(template,k=1)
  • 顺时针旋转90度
  • rotat1=np.rot90(template,k=-1)

rotate 方法

rotate 方法是 OpenCV 提供的一种图像旋转函数,它可以对图像进行任意角度的旋转。这个方法非常灵活,因为它允许用户指定旋转的中心点、旋转的角度以及缩放因子。

使用OpenCV进行旋转

使用OpenCV的 rotate 函数对模板图像进行旋转操作。

  • 顺时针旋转90度
  • rotated1 = cv2.rotate(template, cv2.ROTATE_90_CLOCKWISE)
  • 逆时针旋转90度
  • rotated2 = cv2.rotate(template, cv2.ROTATE_90_COUNTERCLOCKWISE)
  • 旋转180度
  • rotated3 = cv2.rotate(template, cv2.ROTATE_180)

旋转后的图片进行模板匹配

1.需要旋转的图片和需要匹配的图片

        需要旋转的图片

        需要匹配的图片

2.读取图像文件

# 读取主图像文件 "image.jpg" 并将其转换为RGB图像
img_rgb = cv2.imread("image.jpg")# 将RGB图像转换为灰度图像,以便进行模板匹配
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)# 读取模板图像 "jiantou.jpg" 并将其转换为灰度图像
template = cv2.imread("jiantou.jpg", 0)

3.获取所有旋转后的图像进行匹配

# 循环四次,分别对应模板图像的0度、90度、180度、270度旋转
for i in range(4):# 使用numpy的rot90函数将模板图像逆时针旋转i*90度# k=-[i] 表示逆时针旋转,如果是顺时针则使用 k=irotats = np.rot90(template, k=-i)# 获取旋转后的模板图像的高度和宽度h, w = rotats.shape[:2]# 使用OpenCV的matchTemplate函数在灰度图像中寻找旋转后的模板图像的位置res = cv2.matchTemplate(img_gray, rotats, cv2.TM_CCOEFF_NORMED)# 设置匹配的阈值为0.9threshold = 0.9# 找出匹配度大于等于阈值的位置loc = np.where(res >= threshold)# 遍历所有匹配的位置,画出矩形框for pt in zip(*loc[::-1]):cv2.rectangle(img_rgb, pt, (pt[0]+w, pt[1]+h), (0, 0, 255), 1)# 显示匹配结果图像,注意这里应该在循环外部显示,否则会多次覆盖cv2.imshow('res.png', img_rgb)# 等待按键事件,以便在图像窗口中查看结果
cv2.waitKey(0)

4.代码结果

5.完整代码

# 导入OpenCV库
import cv2
import numpy as np# 读取主图像文件 "image.jpg" 并将其转换为RGB图像
img_rgb = cv2.imread("image.jpg")# 将RGB图像转换为灰度图像,以便进行模板匹配
img_gray = cv2.cvtColor(img_rgb, cv2.COLOR_BGR2GRAY)# 读取模板图像 "jiantou.jpg" 并将其转换为灰度图像
template = cv2.imread("jiantou.jpg", 0)# 循环四次,分别对应模板图像的0度、90度、180度、270度旋转
for i in range(4):# 使用numpy的rot90函数将模板图像逆时针旋转i*90度# k=-[i] 表示逆时针旋转,如果是顺时针则使用 k=irotats = np.rot90(template, k=-i)# 获取旋转后的模板图像的高度和宽度h, w = rotats.shape[:2]# 使用OpenCV的matchTemplate函数在灰度图像中寻找旋转后的模板图像的位置res = cv2.matchTemplate(img_gray, rotats, cv2.TM_CCOEFF_NORMED)# 设置匹配的阈值为0.9threshold = 0.9# 找出匹配度大于等于阈值的位置loc = np.where(res >= threshold)# 遍历所有匹配的位置,画出矩形框for pt in zip(*loc[::-1]):cv2.rectangle(img_rgb, pt, (pt[0]+w, pt[1]+h), (0, 0, 255), 1)# 显示匹配结果图像,注意这里应该在循环外部显示,否则会多次覆盖cv2.imshow('res.png', img_rgb)# 等待按键事件,以便在图像窗口中查看结果
cv2.waitKey(0)


http://www.mrgr.cn/news/24180.html

相关文章:

  • 《旧衣服的销路在哪里》
  • MYSQL的常用命令和函数
  • python-回文数(一)
  • 国家标准和行业标准有什么区别?如何办理国家标准?
  • 网上请假|基于springboot的学生网上请假系统设计与实现(附项目源码+论文+数据库)
  • 【数字IC自整资料】笔试相关
  • 【Linux】Linux权限历险记---组和用户的关系
  • 开源协议有哪些坑?来,比较一下~
  • 校篮球联赛系统小程序的设计
  • 因IBM裁员聊一聊外企程序员如何应对
  • python 实现fibonacci斐波那契算法
  • 如何用matlab灵活控制feko的求解
  • Open-Vocabulary SAM: 分割并交互式识别两万类别。
  • 地址解析协议(ARP)
  • Python画笔案例-043 绘制“篱笆“
  • RabbitMQ 的事务消息了解吗【RabbitMQ 事务消息实战】
  • 【JS】函数形参数量规则
  • 中电金信:源启混沌工程平台(V4)与东方通TongwebV7.0完成适配认证
  • 空气开关跳闸的原因及解决办法
  • 存储虚拟化