图像旋转
在图像处理中,rotate
和 rot90
是两种常见的图像旋转方法,它们在功能和使用上有一些区别。下面我将分别介绍这两种方法,并解释它们的主要区别
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.读取图像文件
# 读取主图像文件 "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)
2.获取所有旋转后的图像进行匹配
# 循环四次,分别对应模板图像的0度、90度、180度、270度旋转
for i in range(4):
# 使用numpy的rot90函数将模板图像逆时针旋转i*90度
# k=-[i] 表示逆时针旋转,如果是顺时针则使用 k=i
rotats = np.rot90(template, k=-i)
# 获取旋转后的模板图像的高度和宽度
h, w = rotats.shape[:2]
# 使用OpenCV的matchTemplate函数在灰度图像中寻找旋转后的模板图像的位置
res = cv2.matchTemplate(img_gray, rotats, cv2.TM_CCOEFF_NORMED)
# 设置匹配的阈值为0.9
threshold = 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)
3.完整代码
# 导入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=i
rotats = np.rot90(template, k=-i)
# 获取旋转后的模板图像的高度和宽度
h, w = rotats.shape[:2]
# 使用OpenCV的matchTemplate函数在灰度图像中寻找旋转后的模板图像的位置
res = cv2.matchTemplate(img_gray, rotats, cv2.TM_CCOEFF_NORMED)
# 设置匹配的阈值为0.9
threshold = 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)
标签:img,cv2,旋转,opencv,图像,90,模板
From: https://blog.csdn.net/mohanyelong/article/details/142128171