【OpenCV几何变换】:图像旋转与仿射变换的详细教程

发布时间: 2024-12-03 10:21:02 阅读量: 17 订阅数: 16
![【OpenCV几何变换】:图像旋转与仿射变换的详细教程](https://opengraph.githubassets.com/aa2229f96c1044baae1f91a6a38d0120b8a8ca7f00e1210a022f62558a9322f8/opencv/opencv/issues/17069) 参考资源链接:[OpenCV-Python中文教程:官方指南带目录PDF](https://wenku.csdn.net/doc/6412b487be7fbd1778d3fe47?spm=1055.2635.3001.10343) # 1. OpenCV几何变换概述 OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库。它拥有丰富的视觉处理功能,能够帮助我们轻松实现图像和视频的捕获、处理、分析和展示。几何变换是OpenCV中的一个重要领域,它允许我们对图像进行旋转、缩放、平移、扭曲等操作,以适应不同场景下的应用需求。几何变换广泛应用于图像校正、图像拼接、增强现实、机器视觉系统等领域。在本章中,我们将概览OpenCV几何变换的核心概念和技术,为深入学习各个具体变换方法打下基础。 # 2. 图像旋转的理论与实践 ## 2.1 图像旋转的基本概念 ### 2.1.1 旋转中心与旋转角度 在进行图像旋转时,旋转中心是一个非常重要的概念。旋转中心可以看作是图像围绕其进行旋转的点。在二维空间中,旋转中心决定了图像旋转的轨迹,从而影响到旋转后图像的位置。 旋转角度是指图像旋转的角度大小,其单位通常是度(°)或弧度(rad)。在OpenCV中,图像的旋转操作通常是在逆时针方向上进行的,可以通过设置一个正值来实现逆时针旋转,设置负值则实现顺时针旋转。 ### 2.1.2 旋转变换的数学模型 图像旋转可以通过线性代数中的旋转变换矩阵来实现,其数学模型可以表示为: ``` | cosθ -sinθ x_c | R = | sinθ cosθ y_c | | 0 0 1 | ``` 其中,`θ` 表示旋转角度,`(x_c, y_c)` 表示旋转中心的坐标。矩阵中的 `x_c` 和 `y_c` 允许我们在图像的任意点设置旋转中心。 ## 2.2 图像旋转的OpenCV实现 ### 2.2.1 使用cv2.getRotationMatrix2D获取旋转矩阵 在OpenCV中,`cv2.getRotationMatrix2D` 函数被用来计算2D图像旋转的变换矩阵。这个矩阵随后可以用 `cv2.warpAffine` 函数应用到原图上,完成图像旋转操作。 函数的定义如下: ```python M = cv2.getRotationMatrix2D(center, angle, scale) ``` - `center`:旋转中心的坐标 `(x_c, y_c)`。 - `angle`:旋转角度,以度为单位。 - `scale`:缩放比例,通常用于同时放大或缩小图像。 ### 2.2.2 应用warpAffine进行图像旋转 `cv2.warpAffine` 函数应用旋转矩阵 `M` 对图像进行实际的旋转操作。其使用方式如下: ```python rotated_image = cv2.warpAffine(src, M, dsize) ``` - `src`:原始图像。 - `M`:通过 `cv2.getRotationMatrix2D` 获取的旋转矩阵。 - `dsize`:输出图像的大小,设置为 `-1, -1` 时,输出图像的大小与输入图像相同。 ## 2.3 图像旋转实践案例分析 ### 2.3.1 简单图像旋转操作实例 下面给出一个简单的图像旋转操作实例。首先,读取一张图片,然后使用 `cv2.getRotationMatrix2D` 获取旋转矩阵,接着使用 `cv2.warpAffine` 实现旋转: ```python import cv2 import numpy as np # 读取图片 image = cv2.imread('example.jpg') # 设置旋转中心和角度 center = (image.shape[1]//2, image.shape[0]//2) angle = 45 # 获取旋转矩阵 M = cv2.getRotationMatrix2D(center, angle, 1.0) # 执行旋转操作 rotated_image = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) # 显示原图和旋转后的图像 cv2.imshow('Original Image', image) cv2.imshow('Rotated Image', rotated_image) # 等待按键后关闭所有窗口 cv2.waitKey(0) cv2.destroyAllWindows() ``` ### 2.3.2 结合ROI的图像旋转进阶操作 在某些情况下,可能只希望对图像的一个特定区域(Region of Interest, ROI)进行旋转。这可以通过定义ROI的坐标,然后只对这部分进行旋转操作来实现。 假设我们想要旋转图像中从坐标 (x1, y1) 到 (x2, y2) 的区域: ```python # 定义ROI的坐标 x1, y1 = 50, 50 x2, y2 = 150, 150 # 创建ROI掩码 mask = np.zeros_like(image) cv2.rectangle(mask, (x1, y1), (x2, y2), (255, 255, 255), -1) # 获取ROI roi = image.copy() cv2.rectangle(roi, (x1, y1), (x2, y2), (0, 0, 0), 1) # 将ROI的其余部分置为0 image[y1:y2, x1:x2] = 0 # 应用旋转矩阵到原图并只保留旋转后的ROI区域 rotated_image = cv2.warpAffine(image, M, (image.shape[1], image.shape[0])) rotated_roi = rotated_image[y1:y2, x1:x2].copy() # 合并旋转后的ROI和其余部分 rotated_image[y1:y2, x1:x2] = rotated_roi # 显示原始和旋转后的图像 cv2.imshow('Original Image', image) cv2.imshow('Rotated Image with ROI', rotated_image) # 等待按键后关闭所有窗口 cv2.waitKey(0) cv2.destroyAllWindows() ``` 以上代码首先创建了一个掩码,用于定义旋转的区域,然后将图像其余部分设置为黑色(即0)。这样,在旋转后,只有定义的ROI区域会发生旋转。最后,将旋转后的ROI复制回原始图像中的对应位置,从而实现了只旋转ROI区域的效果。 # 3. 仿射变换的理论与实践 ## 3.1 仿射变换基础 ### 3.1.1 仿射变换的定义与性质 仿射变换(Affine transformation)是图像处理中一种基本而重要的几何变换。它是线性变换与平移的组合,保持了图像的“平直性”和“平行性”。也就是说,在仿射变换中,直线经过变换后仍然是直线,且平行线经过变换后仍然保持平行。 仿射变换具有以下性质: - **线性保持性**:仿射变换保持了图像的线性特征。 - **平行线保持性**:任意两组平行线在仿射变换后仍然保持平行。 - **比例不变性**:仿射变换不保持距离和角度,即长度和角度的度量不保持不变。 - *
corwn 最低0.47元/天 解锁专栏
买1年送1年
点击查看下一篇
profit 百万级 高质量VIP文章无限畅学
profit 千万级 优质资源任意下载
profit C知道 免费提问 ( 生成式Al产品 )

相关推荐

SW_孙维

开发技术专家
知名科技公司工程师,开发技术领域拥有丰富的工作经验和专业知识。曾负责设计和开发多个复杂的软件系统,涉及到大规模数据处理、分布式系统和高性能计算等方面。
专栏简介
欢迎来到 OpenCV 官方中文版教程专栏!本专栏汇集了图像处理领域的权威指南,涵盖从基础概念到高级技术的各个方面。 通过深入浅出的讲解和丰富的代码示例,您将掌握 OpenCV 的核心函数和库,了解图像处理的原理和算法。专栏还提供了性能提升技巧、机器学习集成、智能监控系统构建、图像质量提升方法、模式识别技术、颜色空间分析、数据结构优化、滤波器和边缘检测实现、深度学习应用、GUI 开发、多线程技术和几何变换等方面的深入解析。 无论您是图像处理新手还是经验丰富的开发者,本专栏都能为您提供全面的知识和实践指导,帮助您提升图像处理技能,解锁图像分析和计算机视觉领域的无限可能。
最低0.47元/天 解锁专栏
买1年送1年
百万级 高质量VIP文章无限畅学
千万级 优质资源任意下载
C知道 免费提问 ( 生成式Al产品 )

最新推荐

WS1850S LPCD稳定性保障:监控、日志分析与系统维护,专家教你怎么做!

![WS1850S LPCD稳定性保障:监控、日志分析与系统维护,专家教你怎么做!](https://www.linux.com/wp-content/uploads/2019/08/logs_main.jpg) 参考资源链接:[WS1850S LPCD低功耗卡检测手册:配置与操作详解](https://wenku.csdn.net/doc/644b82e0ea0840391e559897?spm=1055.2635.3001.10343) # 1. WS1850S LPCD系统概述 WS1850S LPCD系统是企业信息科技基础架构中的关键组成部分,它负责处理、存储和分发数据,保证业务连

【大数据分析】:X-ways Forensics中的数据线索提取

![大数据分析](https://www.telework.ro/wp-content/uploads/2021/07/Database-Design-2nd-Edition-1560272114._print_Page_45-2.jpg) 参考资源链接:[X-ways Forensics取证分析工具快速入门教程](https://wenku.csdn.net/doc/24im1khc8k?spm=1055.2635.3001.10343) # 1. 大数据分析基础和X-ways Forensics概述 在当今信息技术高速发展的时代,大数据已经成为了企业决策、网络安全、以及法律取证等多个领

HDS VSP G系列存储空间管理优化:释放更多价值

![HDS VSP G系列存储空间管理优化:释放更多价值](https://thinkit.co.jp/sites/default/files/articles/em23.jpg) 参考资源链接:[HDS_VSP_G200 G400 G600 安装配置指南-硬件更换等配置.pdf](https://wenku.csdn.net/doc/644b828eea0840391e559882?spm=1055.2635.3001.10343) # 1. HDS VSP G系列存储概述 HDS(Hitachi Data Systems)的VSP G系列存储系统是业界领先的企业级存储解决方案之一。它集

【快递服务质量管理标准】:建立行业标准与提升顾客体验的全面指南

![【快递服务质量管理标准】:建立行业标准与提升顾客体验的全面指南](https://rmrbcmsonline.peopleapp.com/upload/ueditor/image/20230426/1682477047120215.png?x-oss-process=style/w10) 参考资源链接:[快递公司送货策略 数学建模](https://wenku.csdn.net/doc/64a7697db9988108f2fc4e50?spm=1055.2635.3001.10343) # 1. 快递服务质量管理概述 快递服务质量管理是确保快递企业能够在竞争激烈的市场中保持领先地位的关

数字信号处理习题研究:深入理解信号处理的每一个细节,展现技术的魅力

![数字信号处理习题研究:深入理解信号处理的每一个细节,展现技术的魅力](https://img-blog.csdnimg.cn/direct/627a0383f1d442b2b934abb4c601abd9.png) 参考资源链接:[《数字信号处理》第四版Sanjit-K.Mitra习题解答](https://wenku.csdn.net/doc/2i98nsvpy9?spm=1055.2635.3001.10343) # 1. 数字信号处理基础知识 ## 1.1 数字信号处理简述 数字信号处理(Digital Signal Processing, DSP)是使用数字计算机来操作模拟信

三菱PLC-QJ71MB91安全编程手册:如何实现稳定可靠的自动化操作

![三菱PLC-QJ71MB91安全编程手册:如何实现稳定可靠的自动化操作](https://p9-pc-sign.douyinpic.com/obj/tos-cn-p-0015/47205787e6de4a1da29cb3792707cad7_1689837833?x-expires=2029248000&x-signature=Nn7w%2BNeAVaw78LQFYzylJt%2FWGno%3D&from=1516005123) 参考资源链接:[三菱PLC QJ71MB91 MODBUS接口手册:安全操作与配置指南](https://wenku.csdn.net/doc/6412b6ed

IMX385LQR传感器全方位指南:性能解析与行业应用(10大关键特性和实用案例)

![Sony IMX385LQR规格书](https://www.ximea.com/images/stories/imx255%20imx253%20usb3%20vision%20camera%20pregius%20sony%20cmos.jpg) 参考资源链接:[Sony IMX385LQR:高端1080P星光级CMOS传感器详解](https://wenku.csdn.net/doc/6412b6d9be7fbd1778d48342?spm=1055.2635.3001.10343) # 1. IMX385LQR传感器概述 在当今这个高度数字化的时代,传感器技术成为连接物理世界与

208TD数据压缩:优化存储减少资源消耗的有效方法

参考资源链接:[208TD说明书.pdf](https://wenku.csdn.net/doc/64619a5e543f8444889374e0?spm=1055.2635.3001.10343) # 1. 数据压缩基础与重要性 在信息技术飞速发展的今天,数据压缩技术已成为减少存储空间需求、优化数据传输效率的关键技术之一。本章将从数据压缩的基本概念入手,深入探讨其在现代社会中所承载的重要性和基础应用。 ## 1.1 数据压缩的基本概念 数据压缩是指在不丢失信息的前提下,采用某种特定的编码方式将数据进行缩减的过程。这种技术广泛应用于计算机网络、移动通信、存储设备和多媒体处理等领域。通过减

【远程监控与运维】:TIA博途S7-1200高低字节调换的高效运维秘诀

参考资源链接:[TIA博途S7-1200四种方法转换浮点数高低字节/字](https://wenku.csdn.net/doc/49mgf2c426?spm=1055.2635.3001.10343) # 1. 远程监控与运维概述 随着信息技术的飞速发展,远程监控与运维成为了企业管理、监控和维护IT基础设施的重要手段。本章将探讨远程监控与运维的基本概念、发展现状和其在企业中的实际应用,为读者构建一个全面的理解框架。 远程监控与运维是一套通过网络技术对IT系统进行实时监控、诊断、预防和解决问题的体系。它能够及时发现故障、分析问题并提供处理方案,同时支持对关键性能指标的长期追踪和分析。在现代化