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.读取图像文件

# 读取主图像文件 "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)

你可能感兴趣的:(学习,opencv,机器学习,人工智能,计算机视觉)