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

OpenCV中的图像旋转方法详解

文章目录

    • 引言
    • 1. 简单的旋转:cv2.rotate()
    • 2. 任意角度旋转:cv2.getRotationMatrix2D() + cv2.warpAffine()
    • 结论

引言

在计算机视觉和图像处理领域,图像旋转是一项基础而重要的操作。OpenCV作为最流行的计算机视觉库之一,提供了多种实现图像旋转的方法。本文将详细介绍OpenCV中的各种旋转技术,帮助读者理解它们的原理、适用场景以及具体实现方法。

1. 简单的旋转:cv2.rotate()

OpenCV提供了最简单的旋转函数cv2.rotate(),它支持90度、180度和270度的顺时针旋转。

import cv2# 读取图像
img = cv2.imread('image.jpg')# 顺时针90度旋转
rotated_shun90 = cv2.rotate(img,cv2.ROTATE_90_CLOCKWISE) #顺时针旋转90度# 180度旋转
rotated_180 = cv2.rotate(img, cv2.ROTATE_180)#逆时针90度旋转
rotated_ni90 = cv2.rotate(img,cv2.ROTATE_90_COUNTERCLOCKWISE) #逆时针旋转90度

我们现在使用一张可乐瓶的图片作为原图:
在这里插入图片描述
而运行结果如下:
在这里插入图片描述
这段代码也可使用numpy库中的方法来表示:

import cv2
import numpy as npimg = cv2.imread('image.jpg')# 旋转 90 度,k=-1 表示顺时针旋转 90 度
rotated_image1 = np.rot90(img,k=-1)
# 旋转 90 度,k=1 表示逆时针旋转 90 度
rotated_image2 = np.rot90(img,k=1)

这段代码与上面所表示的代码实现的功能是一样的

优点

  • 实现简单
  • 计算速度快
  • 不会引入插值伪影

缺点

  • 只能旋转特定角度
  • 不能自定义旋转中心

2. 任意角度旋转:cv2.getRotationMatrix2D() + cv2.warpAffine()

对于任意角度的旋转,OpenCV提供了更灵活的方法组合:

# 获取图像高度和宽度
(h, w) = img.shape[:2]# 定义旋转中心(图像中心)
center = (w // 2, h // 2)# 定义旋转角度(45度)和缩放因子(1.0表示不缩放)
angle = 45
scale = 1.0# 获取旋转矩阵
M = cv2.getRotationMatrix2D(center, angle, scale)# 应用仿射变换进行旋转
rotated = cv2.warpAffine(img, M, (w, h))

以下是运行结果:
在这里插入图片描述

参数说明

  • center: 旋转中心点坐标
  • angle: 旋转角度(正值为逆时针)
  • scale: 缩放因子

优点

  • 支持任意角度旋转
  • 可以自定义旋转中心
  • 可以同时进行缩放

缺点

  • 旋转后图像角落可能被裁剪
  • 需要插值处理,可能引入伪影

结论

OpenCV提供了丰富而强大的图像旋转功能,理解这些方法的原理和适用场景,可以帮助我们在实际应用中选择最合适的旋转策略,平衡速度和质量需求。

希望本文能帮助您更好地理解和使用OpenCV中的旋转方法。在实际应用中,建议根据具体需求选择合适的方法,并通过实验调整参数以获得最佳效果。

相关文章:

  • 如何评估一个需求的测试时间
  • 树模型与集成学习(决策树核心算法:ID3/C4.5/CART、随机森林、GBDT/XGBoost)
  • Python自动化selenium-一直卡着不打开浏览器怎么办?
  • Unity中的数字孪生项目:两种输入方式对观察物体的实现
  • 从代码实现理解Vision Permutator:WeightedPermuteMLP模型解析
  • 大麦缺货状态进订单源码
  • 编译原理|| 实验一:词法分析程序设计
  • 《浔川代码编辑器v2.0内测(完整)报告》
  • 学习笔记二十二—— 并发五大常见陷阱
  • 中科院数据生成赋能具身导航!WCGEN:基于世界一致性数据生成的视觉语言导航
  • XAML基本语法与例子
  • Promise 原理、用法与在 Vue 中的最佳实践
  • BGP路由控制实验
  • 【第16届蓝桥杯软件赛】CB组第一次省赛
  • xpath选择器
  • jax 备忘录
  • 多表查询之连接查询
  • 微服务划分的思考
  • [陇剑杯 2021]内存分析(问1)
  • 你学会了些什么220622?--搭建UI自动化
  • 专家学者视角下的乡村教育:目标与出路并非“走出大山”
  • 上海虹桥机场口岸单日出入境突破1.1万人次,创今年新高
  • 美国同日曝两起泄密事件:防长群聊向家人分享作战计划,白宫平面图被“共享”
  • 体坛联播|巴萨三球逆转塞尔塔,CBA季后赛山西横扫广东
  • 习近平会见柬埔寨太后莫尼列
  • 法治课|男子同时与两名女子办婚礼闹剧,是否应受处罚?