Python OpenCV 图像旋转,取经之旅第 11 天
【摘要】 今天是持续写作的第 44 / 100 天。如果你有想要交流的想法、技术,欢迎在评论区留言。本篇博客学习 OpenCV 中关于图像旋转的函数,核心学习到的函数依旧是 warpAffine,但需要新增一个 getRotationMatrix2D 函数 。 getRotationMatrix2D 函数图像的旋转是让图像按照某一点旋转到一个指定的角度。图像旋转之后不会变形,但是旋转后的图像和原图像坐...
今天是持续写作的第 44 / 100 天。
如果你有想要交流的想法、技术,欢迎在评论区留言。
本篇博客学习 OpenCV 中关于图像旋转的函数,核心学习到的函数依旧是 warpAffine,但需要新增一个 getRotationMatrix2D
函数 。
getRotationMatrix2D 函数
图像的旋转是让图像按照某一点旋转到一个指定的角度。图像旋转之后不会变形,但是旋转后的图像和原图像坐标之间的关系,已经不能通过简单的加减乘除得到,需要通过一系列的复杂运算得到。
好在是这个运算过程本阶段不需要手动实现,直接依靠 getRotationMatrix2D
函数即可实现。
该函数的语法格式如下:
M = cv2.getRotationMatrix2D(center, angle, scale)
相关参数如下:
- center:图片旋转的中心点;
- angle:旋转的角度;
- scale:图像缩放因子,即旋转后图像相比原来的缩放比例。
返回变换矩阵 M,即旋转计算之后得到的矩阵。
center
旋转的中心点,一般是图片的中心,用 img.shape
取得长宽,然后取得一半即可。
angle
旋转的角度,正值是逆时针旋转,负值是顺时针旋转。
测试代码如下:
import cv2 as cv
import matplotlib.pyplot as plt
img = cv.imread('11.jpg', -1)
# BGR 转换为 RGB
img = 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 相关的知识点,你掌握了吗?
空闲之余,可以订阅橡皮擦的爬虫百例课程学习爬虫知识。
【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)