首页 > 其他分享 >opencv学习:图像旋转的两种方法,旋转后的图片进行模板匹配代码实现

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

时间:2024-09-15 20:20:45浏览次数:15  
标签:img cv2 旋转 opencv 图像 90 模板

图像旋转

在图像处理中,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)

标签:img,cv2,旋转,opencv,图像,90,模板
From: https://blog.csdn.net/mohanyelong/article/details/142128171

相关文章

  • opencv学习:信用卡卡号识别
    该代码用于从信用卡图像中自动识别和提取数字信息。该系统将识别信用卡类型,并输出信用卡上的数字序列。1.创建命令行参数数字模板信用卡#创建命令行参数解析器ap=argparse.ArgumentParser()#添加命令行参数-i/--image,指定输入图像路径ap.add_argument("-i","--i......
  • 帝国cms标签模板在哪下载
    帝国CMS的标签模板可以从多个途径下载:帝国CMS官方网站:访问帝国CMS的官方网站:在导航栏中找到“模板”选项,浏览并下载所需的模板。注意,标签模板通常是以 .et 为后缀的文件。第三方模板市场:一些第三方模板市场也提供帝国CMS的模板下载,例如TemplateMonster、ThemeForest......
  • OpenCV和Tesseract OCR识别复杂验证码喽~~
    目录代码实现思路流程:主要流程:整体代码效果展示原图处理之后的图总结流程图代码实现思路使用OpenCV进行图像预处理,并通过TesseractOCR来识别验证码中的字符。以下是其实现思路的详细讲解:流程:加载验证码图像:使用cv2.imread()读取验证码图片,将其加载为......
  • 【生日视频制作】奔驰梅赛德斯大奔提车交车仪式感视频拍照AE模板修改文字软件一键生成
    生日视频制作教程奔驰梅赛德斯大奔提车交车仪式感视频拍照AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程AE模板套用改图文教程↓↓:怎么如何做的【生日视频制作】奔驰梅赛德斯大奔提车交车仪式感视频拍照AE模板修改文字软件一键生成器教程特效素材【AE模板】......
  • 【生日视频制作】劳斯莱斯提车交车仪式感视频拍照AE模板修改文字软件一键生成器教程特
    生日视频制作教程劳斯莱斯提车交车仪式感视频拍照AE模板修改文字特效广告生成神器素材祝福玩法AE模板工程怎么如何做的【生日视频制作】劳斯莱斯提车交车仪式感视频拍照AE模板修改文字软件一键生成器教程特效素材【AE模板】生日视频制作步骤:下载AE模板安装AE软件......
  • k8s官网下载模板yaml方法
    动一下小手点一下赞。谢谢!你的赞就是我更新的动力。Kubernetes官网下载模板yaml方法指南概述Kubernetes(简称K8s)是一个开源的容器编排平台,可以实现容器化应用的部署、扩展和管理。Kubernetes官网提供了丰富的资源和文档,其中包括各种示例的模板yaml文件,用于快速部署应用和配置资源。......
  • OpenCV运动分析和目标跟踪(1)累积操作函数accumulate()的使用
    操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:VisualStudioCode编程语言:C++11算法描述将一个图像添加到累积图像中。该函数将src或其部分元素添加到dst中:dst(......
  • 新电脑安装和配置pytorch、anaconda、CUDA、cuDNN、pycharm、OpenCV的过程记录
    显卡驱动和CUDA一、升级显卡驱动到官方最新版    1、打开英伟达官网,输入显卡芯片型号,手动搜索并下载显卡驱动。 NVIDIA官方驱动 ​    2、下载完成后安装驱动。 二、确认显卡支持的最高CUDA版本    1、键盘"win+R",调出运行输入cmd后点”......
  • OpenCV(cv::split())
    目录1.函数定义2.工作原理3.示例4.使用场景5.注意事项cv::split()是OpenCV提供的一个函数,用于将多通道图像分割成其各个单通道。该函数主要用于处理彩色图像和多通道矩阵,通常用于对图像中的每个颜色通道单独进行处理。1.函数定义voidcv::split(constMat&src,s......
  • 模板库
    数据结构莫队普通莫队题目来源:P1494[国家集训队]小Z的袜子。#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;constintN=2e5+10;structnode{intl,r,id;}q[N];structnode2{intc,s;}ans[N];intn,m;inta[N],st[N......