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

举报
梦想橡皮擦 发表于 2021/09/15 09:08:03 2021/09/15
【摘要】 今天是持续写作的第 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

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。