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

OpenCV 图像旋转

一、OpenCV 图像旋转介绍

在计算机视觉和图像处理领域,图像旋转是指将图像围绕某个中心点按照一定的角度进行转动。旋转操作会改变图像中像素的位置,从而得到新的图像布局。这一操作在很多场景中都有重要应用,比如文档矫正、目标检测时对图像进行预处理、图像增强等。

二、OpenCV 中图像旋转的原理

三、代码实现

1. 导入必要的库

import cv2
import numpy as np

2. 读取图像

img = cv2.imread('kele.png')

3. 使用 np.rot90 进行图像旋转

# 旋转 90 度,k=-1 表示顺时针旋转 90 度
rotated_image1 = np.rot90(img, k=-1)
rotated_image2 = np.rot90(img, k=1)

np.rot90 是 NumPy 提供的函数,用于将数组(这里是图像数据)逆时针旋转 90 度的倍数。
k 参数指定旋转的次数。k = -1 表示顺时针旋转 90 度(相当于逆时针旋转 -90 度),将旋转后的图像存储在 rotated_image1 中。
k = 1 表示逆时针旋转 90 度,旋转后的图像存储在 rotated_image2 中。

4. 显示原始图像和使用 np.rot90 旋转后的图像

cv2.imshow('yuantu', img)
cv2.imshow('rotated_image1', rotated_image1)
cv2.imshow('rotated_image2', rotated_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()

cv2.imshow 函数用于在窗口中显示图像。分别显示原始图像 img 和两次旋转后的图像 rotated_image1、rotated_image2,窗口标题分别为 yuantu、rotated_image1 和 rotated_image2。
cv2.waitKey(0) 用于等待用户按键。参数 0 表示无限等待,直到用户按下任意键。
cv2.destroyAllWindows 函数用于关闭所有由 OpenCV 打开的窗口。

5. 使用 cv2.rotate 进行图像旋转

rotated_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
rotated_image1 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
rotated_image2 = cv2.rotate(img, cv2.ROTATE_180)

cv2.rotate 是 OpenCV 提供的专门用于图像旋转的函数。
cv2.ROTATE_90_CLOCKWISE 表示顺时针旋转 90 度,将旋转后的图像存储在 rotated_image 中。
cv2.ROTATE_90_COUNTERCLOCKWISE 表示逆时针旋转 90 度,旋转后的图像存储在 rotated_image1 中。
cv2.ROTATE_180 表示旋转 180 度,旋转后的图像存储在 rotated_image2 中。

6. 显示使用 cv2.rotate 旋转后的图像

cv2.imshow('shun90', rotated_image)
cv2.imshow('ni90', rotated_image1)
cv2.imshow('180', rotated_image2)
cv2.waitKey(0)

再次使用 cv2.imshow 函数显示三次旋转后的图像,窗口标题分别为 shun90(顺时针 90 度)、ni90(逆时针 90 度)和 180(旋转 180 度)。
最后使用 cv2.waitKey(0) 等待用户按键,但代码中缺少关闭窗口的操作,建议添加 cv2.destroyAllWindows() 以确保程序结束时关闭所有窗口。

完整代码:

import cv2
import numpy as np

img = cv2.imread('kele.png')
# 旋转 90 度,k=-1 表示顺时针旋转 90 度
rotated_image1 = np.rot90(img, k=-1)
rotated_image2 = np.rot90(img, k=1)
cv2.imshow('yuantu', img)
cv2.imshow('rotated_image1', rotated_image1)
cv2.imshow('rotated_image2', rotated_image2)
cv2.waitKey(0)
cv2.destroyAllWindows()

rotated_image = cv2.rotate(img, cv2.ROTATE_90_CLOCKWISE)
rotated_image1 = cv2.rotate(img, cv2.ROTATE_90_COUNTERCLOCKWISE)
rotated_image2 = cv2.rotate(img, cv2.ROTATE_180)
cv2.imshow('shun90', rotated_image)
cv2.imshow('ni90', rotated_image1)
cv2.imshow('180', rotated_image2)
cv2.waitKey(0)

结果显示:

四、总结
OpenCV 提供了方便快捷的方法来实现图像旋转,通过 cv2.getRotationMatrix2D 和 cv2.warpAffine 函数,我们可以轻松完成图像的旋转操作。同时,针对旋转后图像可能出现的裁剪问题,我们也可以通过调整旋转矩阵和输出图像大小来解决。图像旋转在多个领域都有广泛的应用,对于提高图像处理和分析的效果具有重要意义。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.dtcms.com/a/124171.html

相关文章:

  • 笔记:头文件与静态库的使用及组织方式
  • 机器学习 从入门到精通 day_03
  • Android Studio Logcat V2 使用指南(适配 2024 年版本)
  • LangChain4j(2):Chat、流式与文生图模型功能
  • xHCI 上 USB 读写分析
  • Vue3 + TypeScript 的 Hooks 实用示例
  • SpringCloud Alibaba 之分布式全局事务 Seata 原理分析
  • GSO-YOLO:基于全局稳定性优化的建筑工地目标检测算法解析
  • 闭包的理解
  • 算法刷题记录——LeetCode篇(1.9) [第81~90题](持续更新)
  • JavaScript防抖与节流
  • Cloudflare教程:免费优化CDN加速配置,提升网站访问速度 | 域名访问缓存压缩视频图片媒体文件优化配置
  • Payoneer(P卡)会关联吗?如何有效防止P卡关联?
  • 第十四天 - Docker容器管理 - docker-py模块实践 - 练习:容器生命周期管理工具
  • Python中的字典
  • ZYNQ笔记(三):GPIO 中断
  • 3DMAX笔记-UV知识点和烘焙步骤
  • Kotlin 学习-集合
  • Stable Diffusion+Pyqt5: 实现图像生成与管理界面(带保存 + 历史记录 + 删除功能)——我的实验记录(结尾附系统效果图)
  • 【C++基础-关键字】:extern
  • 深入理解Java Optional:告别NullPointerException的优雅方式
  • PMP 考试以及学习资料
  • 艾尔登法环地图不能使用鼠标移动或点击传送点原因和设置方法
  • 计算机视觉与深度学习 | 视觉里程计(Visual Odometry, VO)学习思路总结
  • K8S学习之基础七十五:istio实现灰度发布
  • 探秘Transformer系列之(25)--- KV Cache优化之处理长文本序列
  • 架构师论文《论模型驱动软件开发方法在智能制造转型实践中的应用》
  • ​MySQL面试题:索引的底层原理与优化策略​
  • Langflow 远程命令执行漏洞复现(CVE-2025-3248)(附脚本)
  • Python代码缩进统一规范