在前面实现了平移和缩放,还有一种常用的坐标变换,那就是旋转。比如拍摄的照片上传到电脑里,再打开时发现人的头在下面脚在上,这样肯定看不了,那么就需要把这个照片旋转180度才可以接受。由于旋转变换,都是绕着点进行运动的,首先要找到轴的位置,默认是原点(0,0),如果要指定点进行,那么要采用前面的平移操作,即是把图片移到这一点上,然后进行旋转,再把它平移回来,这样才可以完成。所以在这个操作过程里,就要多个矩阵进行操作了,先要进行平移矩阵相乘,再与旋转矩阵相乘,最后与反向平移矩阵相乘。旋转的操作都是使用角度方式来计算,因此要使用中学的知识—三角函数sin和cos等,如果对这些知识忘记了,可以回去复习一下中学知识,到这里就会发现数学的知识是非常有用的,特别是中学的知识。一般会解出方案如下:
再加上齐次化,齐次化的目标主要为了把平移操作统一到一个公式里,就可以把公式写成这样:
这个矩阵变换就是纯旋转的公式。一般情况下,会有平移和缩放一起操作,这样单独地去构造这些矩阵就有些麻烦了,为了简单起见,OpenCV提供了一个函数cv2.getRotationMatrix2D来完成这些操作,这个函数调用参数如下:
retval = cv.getRotationMatrix2D( center, angle, scale )
center是元组表示的旋转中心点。
angle是用度表示的旋转角度。
scale是缩放系数。
其实这个函数是计算这样的矩阵:
所以在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()
输出结果如下:
左边是旋转并缩放的图片,右边是原图。
上面的例子主要调用函数getRotationMatrix2D来构造矩阵,然后调用函数warpAffine来执行仿射变换操作。
总结
以上所述是小编给大家介绍的使用OpenCV实现仿射变换—旋转功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!
更新日志
- 小骆驼-《草原狼2(蓝光CD)》[原抓WAV+CUE]
- 群星《欢迎来到我身边 电影原声专辑》[320K/MP3][105.02MB]
- 群星《欢迎来到我身边 电影原声专辑》[FLAC/分轨][480.9MB]
- 雷婷《梦里蓝天HQⅡ》 2023头版限量编号低速原抓[WAV+CUE][463M]
- 群星《2024好听新歌42》AI调整音效【WAV分轨】
- 王思雨-《思念陪着鸿雁飞》WAV
- 王思雨《喜马拉雅HQ》头版限量编号[WAV+CUE]
- 李健《无时无刻》[WAV+CUE][590M]
- 陈奕迅《酝酿》[WAV分轨][502M]
- 卓依婷《化蝶》2CD[WAV+CUE][1.1G]
- 群星《吉他王(黑胶CD)》[WAV+CUE]
- 齐秦《穿乐(穿越)》[WAV+CUE]
- 发烧珍品《数位CD音响测试-动向效果(九)》【WAV+CUE】
- 邝美云《邝美云精装歌集》[DSF][1.6G]
- 吕方《爱一回伤一回》[WAV+CUE][454M]