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

举报
梦想橡皮擦 发表于 2021/05/26 15:14:14 2021/05/26
【摘要】 今天是持续写作的第 44 / 100 天。 如果你有想要交流的想法、技术,欢迎在评论区留言。 本篇博客学习 OpenCV 中关于图像旋转的函数,核心学习到的函数依旧是 warpAffine,但需要新增一个 getRotationMatrix2D 函数 。 取经之旅第 11 天 getRotationMatrix2D 函数OpenCV 尾声 ...

今天是持续写作的第 44 / 100 天。
如果你有想要交流的想法、技术,欢迎在评论区留言。

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

取经之旅第 11 天

getRotationMatrix2D 函数

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

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

该函数的语法格式如下:

M = cv2.getRotationMatrix2D(center, angle, scale)

  
 
  • 1

相关参数如下:

  • 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()

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

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

M3 = cv.getRotationMatrix2D((cols/2, rows/2), -90, 0.5)

  
 
  • 1

结果如下图所示:

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

OpenCV 尾声

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

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

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

文章来源: dream.blog.csdn.net,作者:梦想橡皮擦,版权归原作者所有,如需转载,请联系作者。

原文链接:dream.blog.csdn.net/article/details/112203032

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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