写点什么

Python OpenCV 图像旋转,取经之旅第 11 天

发布于: 2021 年 03 月 27 日
Python OpenCV 图像旋转,取经之旅第 11 天

本篇博客学习 OpenCV 中关于图像旋转的函数,核心学习到的函数依旧是 warpAffine,但需要新增一个 getRotationMatrix2D 函数 。


getRotationMatrix2D 函数


图像的旋转是让图像按照某一点旋转到一个指定的角度。图像旋转之后不会变形,但是旋转后的图像和原图像坐标之间的关系,已经不能通过简单的加减乘除得到,需要通过一系列的复杂运算得到。


好在是这个运算过程本阶段不需要手动实现,直接依靠 getRotationMatrix2D 函数即可实现。


该函数的语法格式如下:


M = cv2.getRotationMatrix2D(center, angle, scale)
复制代码


相关参数如下:


  • center:图片旋转的中心点;

  • angle:旋转的角度;

  • scale:图像缩放因子,即旋转后图像相比原来的缩放比例。


返回变换矩阵 M,即旋转计算之后得到的矩阵。


center 旋转的中心点,一般是图片的中心,用 img.shape 取得长宽,然后取得一半即可。


angle 旋转的角度,正值是逆时针旋转,负值是顺时针旋转。


测试代码如下:


import cv2 as cvimport matplotlib.pyplot as plt
img = cv.imread('11.jpg', -1)# BGR 转换为 RGBimg = cv.cvtColor(img, cv.COLOR_BGR2RGB)print(img.shape)# img.shape 得到的元组是高在前,宽在后rows, cols = img.shape[:2]# 第一个参数旋转中心,第二个参数旋转角度,第三个参数缩放比例M1 = cv.getRotationMatrix2D((cols/2, rows/2), 45, 1)M2 = cv.getRotationMatrix2D((cols/2, rows/2), 90, 1)M3 = cv.getRotationMatrix2D((cols/2, rows/2), -90, 1)
# 注意第三个参数,是列(宽)在前,行(高)在后res1 = cv.warpAffine(img, M1, (cols, rows))res2 = cv.warpAffine(img, M2, (cols, rows))res3 = cv.warpAffine(img, M3, (cols, rows))
plt.subplot(221)plt.imshow(img)plt.subplot(222)plt.imshow(res1)plt.subplot(223)plt.imshow(res2)plt.subplot(224)plt.imshow(res3)plt.show()
复制代码


如果在旋转的时候同步进行缩放,代码如下:


M3 = cv.getRotationMatrix2D((cols/2, rows/2), -90, 0.5)
复制代码

结果如下图所示:



OpenCV 尾声


1 个小时又过去了,对 Python OpenCV 相关的知识点,你掌握了吗?


空闲之余,可以订阅橡皮擦的爬虫百例课程学习爬虫知识。


**想学 Python 爬虫,可以订阅橡皮擦专栏哦~** 🈲🈲🈲🈲 点击发现惊喜 🈲🈲🈲🈲


发布于: 2021 年 03 月 27 日阅读数: 9
用户头像

爬虫 100 例作者,蓝桥签约作者,博客专家 2021.02.06 加入

6 年产品经理+教学经验,3 年互联网项目管理经验; 互联网资深爱好者; 沉迷各种技术无法自拔,导致年龄被困在 25 岁; CSDN 爬虫 100 例作者。 个人公众号“梦想橡皮擦”。

评论

发布
暂无评论
Python OpenCV 图像旋转,取经之旅第 11 天