使用OpenCV实现仿射变换—旋转功能

作者:caimouse 时间:2021-01-20 05:57:48 

在前面实现了平移和缩放,还有一种常用的坐标变换,那就是旋转。比如拍摄的照片上传到电脑里,再打开时发现人的头在下面脚在上,这样肯定看不了,那么就需要把这个照片旋转180度才可以接受。由于旋转变换,都是绕着点进行运动的,首先要找到轴的位置,默认是原点(0,0),如果要指定点进行,那么要采用前面的平移操作,即是把图片移到这一点上,然后进行旋转,再把它平移回来,这样才可以完成。所以在这个操作过程里,就要多个矩阵进行操作了,先要进行平移矩阵相乘,再与旋转矩阵相乘,最后与反向平移矩阵相乘。旋转的操作都是使用角度方式来计算,因此要使用中学的知识—三角函数sin和cos等,如果对这些知识忘记了,可以回去复习一下中学知识,到这里就会发现数学的知识是非常有用的,特别是中学的知识。一般会解出方案如下:

使用OpenCV实现仿射变换—旋转功能

再加上齐次化,齐次化的目标主要为了把平移操作统一到一个公式里,就可以把公式写成这样:

使用OpenCV实现仿射变换—旋转功能

这个矩阵变换就是纯旋转的公式。一般情况下,会有平移和缩放一起操作,这样单独地去构造这些矩阵就有些麻烦了,为了简单起见,OpenCV提供了一个函数cv2.getRotationMatrix2D来完成这些操作,这个函数调用参数如下:

retval = cv.getRotationMatrix2D( center, angle, scale )

center是元组表示的旋转中心点。

angle是用度表示的旋转角度。

scale是缩放系数。

其实这个函数是计算这样的矩阵:

使用OpenCV实现仿射变换—旋转功能

所以在OpenCV里基本不需要自己去单独计算缩放和旋转的矩阵,调用此函数最简单了。下面通过例子来演示旋转的功能:


#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np

#图片的路径
imgname = "img1.jpg"

#读取图片
image = cv2.imread(imgname, cv2.IMREAD_COLOR)

#图片的高度和宽度
h,w = image.shape[:2]

#构造缩放并旋转的2X3的矩阵,然后调用warpAffine执行
A1 = cv2.getRotationMatrix2D((w/2.0, h/2.0), 30, 0.5)
d1 = cv2.warpAffine(image, A1, (w, h), borderValue = 125)

#显示操作之后的图片
cv2.imshow("d1",d1)

#显示图像
cv2.imshow("image", image)

#等待用户输入,然后删除所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

使用OpenCV实现仿射变换—旋转功能

左边是旋转并缩放的图片,右边是原图。

上面的例子主要调用函数getRotationMatrix2D来构造矩阵,然后调用函数warpAffine来执行仿射变换操作。

总结

以上所述是小编给大家介绍的使用OpenCV实现仿射变换—旋转功能,网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

来源:https://blog.csdn.net/caimouse/article/details/100113318

标签:OpenCV,仿射变换,旋转
0
投稿

猜你喜欢

  • python中requests爬去网页内容出现乱码问题解决方法介绍

    2023-09-14 01:00:11
  • antd项目实现彩蛋效果的详细代码

    2023-09-14 12:51:20
  • 详解python上传文件和字符到PHP服务器

    2023-10-15 19:02:12
  • python版本的读写锁操作方法

    2023-04-29 05:18:57
  • python -v 报错问题的解决方法

    2022-04-03 03:07:29
  • python生成13位或16位时间戳以及反向解析时间戳的实例

    2021-02-18 17:16:35
  • 用javascript实现select的美化

    2007-05-11 16:50:00
  • 微信小程序实现图片上传功能实例(前端+PHP后端)

    2023-11-05 14:19:27
  • Python cv2 图像自适应灰度直方图均衡化处理方法

    2022-09-21 17:01:57
  • 详解Python 模拟实现生产者消费者模式的实例

    2022-04-17 10:35:51
  • 通用分页存储过程

    2007-11-28 13:08:00
  • Dreamweaver给你的网页盖个章

    2008-02-03 11:35:00
  • sql基本查询语句介绍

    2008-05-21 13:58:00
  • Mootools常用方法扩展(三)

    2009-01-14 20:07:00
  • 实用PHP会员权限控制实现原理分析

    2023-11-23 11:32:39
  • 浅析Go汇编语法和MatrixOne使用介绍

    2023-07-13 19:38:18
  • 详解python中的线程

    2021-11-19 18:30:35
  • Pip install和Conda install的使用

    2023-11-04 17:32:37
  • Golang语言如何高效拼接字符串详解

    2023-07-11 03:46:57
  • 神经网络python源码分享

    2021-10-07 10:41:00
  • asp之家 网络编程 m.aspxhome.com