【OpenCV 例程200篇】27. 图像的旋转(以任意点为中心)

『youcans 的 OpenCV 例程200篇 - 总目录』


【youcans 的 OpenCV 例程200篇】27. 图像的旋转(以任意点为中心)


图像以任意点 (x0, y0) 为旋转中心、顺时针旋转角度 θ 的旋转操作,可以先将原点平移到旋转中心 (x0, y0) ,然后按照原点旋转,最后再平移回坐标原点,可以由以下公式描述:

[x~y~1]=[10x001y0001][cosθ−sinθ0sinθcosθ0001][10−x001−y0001][xy1]\begin{bmatrix} \tilde{x}\\ \tilde{y}\\ 1 \end{bmatrix}= \begin{bmatrix} 1 &0 &x_0\\ 0 &1 &y_0\\ 0 &0 &1 \end{bmatrix} \begin{bmatrix} cos \theta &-sin \theta &0\\ sin \theta &cos \theta &0\\ 0 &0 &1 \end{bmatrix} \begin{bmatrix} 1 &0 &-x_0\\ 0 &1 &-y_0\\ 0 &0 &1 \end{bmatrix} \begin{bmatrix} x\\ y\\ 1 \end{bmatrix} x~y~1=100010x0y01cosθsinθ0sinθcosθ0001100010x0y01xy1

按上式构造旋转变换矩阵 MAR,由函数 cv2.warpAffine 可以计算变换后的绕原点旋转图像。

简便地,OpenCV 提供了 cv2.getRotationMatrix2D 函数, 根据旋转角度和位移计算旋转变换矩阵 MAR。

函数说明:

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

函数 getRotationMatrix2D 根据旋转参数计算旋转变换矩阵 MAR。

参数说明:

  • center:旋转中心坐标,二元元组 (x0, y0)
  • angle:旋转角度,单位为角度,逆时针为正数,顺时针为负数
  • scale: 缩放因子
  • 返回值:M, 旋转变换矩阵,2行3列

注意事项:

  1. 求出旋转变换矩阵 MAR,由函数 cv2.warpAffine 可以实现任意角度和任意中心的旋转效果。
  2. 以图像中心作为旋转中心时,可以用 img.shape 获得图像的宽度和高度值,除以 2 就是图像中心点坐标。
  3. 旋转角度为 90,180,270 度时,可以用 cv2.rotate(src, rotateCode) 函数实现,该方法实际上是通过矩阵转置实现的,因此速度很快。

基本例程:1.36 图像的旋转(任意旋转中心)

    # 1.36 图像旋转 (以任意点 (x0,y0) 为中心旋转)img = cv2.imread("../images/imgGaia.tif")  # 读取彩色图像(BGR)height, width = img.shape[:2]  # 图片的高度和宽度theta1, theta2 = 30, 45  # 顺时针旋转角度,单位为角度x0, y0 = width//2, height//2  # 以图像中心作为旋转中心MAR1 = cv2.getRotationMatrix2D((x0,y0), theta1, 1.0)MAR2 = cv2.getRotationMatrix2D((x0,y0), theta2, 1.0)imgR1 = cv2.warpAffine(img, MAR1, (width, height))  # 旋转变换,默认为黑色填充imgR2 = cv2.warpAffine(img, MAR2, (width, height), borderValue=(255,255,255))  # 设置白色填充plt.figure(figsize=(10,6))plt.subplot(131), plt.axis('off'), plt.title(r"$Origin$")plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))plt.subplot(132), plt.axis('off'), plt.title(r"$Rotation {}^o$".format(theta1))plt.imshow(cv2.cvtColor(imgR1, cv2.COLOR_BGR2RGB))plt.subplot(133), plt.axis('off'), plt.title(r"$Rotation {}^o$".format(theta2))plt.imshow(cv2.cvtColor(imgR2, cv2.COLOR_BGR2RGB))plt.show()

在这里插入图片描述


(本节完)


版权声明:
youcans@xupt 原创作品,转载必须标注原文链接:(https://blog.csdn.net/youcans/article/details/125112487)
Copyright 2022 youcans, XUPT
Crated:2021-11-18

【第3章:图像的几何变换】

26. 图像的旋转(以原点为中心)
27. 图像的旋转(以任意点为中心)
28. 图像的旋转(直角旋转)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/566025.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OC里面的类

OC里面的类 类的定义 不指定方法的返回值 -(id)initWithObject:(id)obj; - initWithObject:obj; 省略返回值时,默认的类型是id,也就是上面两条等价,在c语言中默认是int 接口 类公开给外部的,关于使用这个类的消息叫接口。 类的定…

人员信息管理

使用Jsp Servlet Tomcat 实现对sqlServer数据库中人员信息的管理:(MVC架构) 准备相应的数据库 链接数据库 实现对数据库中人员信息的增删改查 页面总体效果如下所示: 点击删除之后会删除掉选中的这一行只显示剩下几行内容&a…

【OpenCV 例程200篇】28. 图像的旋转(直角旋转)cv2.rotate

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】28. 图像的旋转(直角旋转) 旋转角度为 90,180,270 度时,可以用 cv2.rotate(src, rotateCode) 函数实现,该方法实际上是通过矩阵…

爱心表白

程序员并不是没有一点乐趣整天枯燥无味的游走在代码中的,在这里给大家提供了一个表白代码 功能描述: 1:能够计算任意两个时间的之间相隔的天数,2:在相隔天数下面输出心形并且心形里面还有英文我爱你字样。相信你已经迫…

OC与C混合编程

OC与C混合编程 oc中使用c语言函数 类的实现文件中可以定义c语言风格的函数,但仅限于implementation的前面,implementation和end之间,end之后 如果函数的作用域仅限于这个文件,那么给函数加上static修饰符比较好。 函数不能之间调用…

2021爱智先行者—(1)开箱点评

【本文正在参与"2021爱智先行者-征文大赛"活动】,活动链接:https://bbs.csdn.net/topics/602601454 2021爱智先行者—(1)开箱点评 欢迎关注 『Python小白的项目实战』 系列,持续更新 2021爱智先行者—&…

随机抽取

随机抽取程序是对数字字母的随机抽取,可用作抽奖程序中中奖号码的选择也可用于老师在课堂上随机点名随机抽人回答问题。 请大家先欣赏效果: 程序解读: 定义数组存储需要抽取的数据设置相应按键,继续或者结束的按钮输出提示文字…

OC里面的类类型

OC里面的类类型 类类型 比如说Volume *v1,*v2 v1和v2都是Volume类型,实际上就是一个指针,如果把v1赋值给v2后,那么v2和v1有相同的属性 空指针nil 返回值为id的类型的方法中,如果出错的话,一般会返回nil 调用端会采用如…

【youcans 的图像处理学习课】5. 图像的几何变换

专栏地址:『youcans 的图像处理学习课』 文章目录:『youcans 的图像处理学习课 - 总目录』 【youcans 的图像处理学习课】5. 图像的几何变换 文章目录【youcans 的图像处理学习课】5. 图像的几何变换1. 几何变换简介1.1 仿射变换基本例程:1.3…

键盘中按键对应的键码值

最近很多人想知道键盘中的按键对应的按键值 下面给大家分享一些键码值 键盘各种按键对应的ASII码如下: keycode 8 BackSpace BackSpace keycode 9 Tab Tab keycode 12 Clear keycode 13 Enter keycode 16 Shift_L keycode 17 Control_L keycode 18 Alt_L k…

python科学计算

1 软件包的安装和介绍 1.1 安装软件包 1.1.1 安装 和Matlab不同,Python的科学软件包由众多的社区维护和发布,因此要一一将其收集齐安装到你的电脑里是一件很费时间的事情。幸好这些工作已经有人帮我们整理好了。只需要下载一个文件,一次安…

【OpenCV 例程200篇】29. 图像的翻转(cv2.flip)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】29. 图像的翻转(cv2.flip) 欢迎关注 『Python小白的OpenCV学习课』 系列,持续更新中 翻转也称镜像,是指将图像沿轴线进行轴对称变换。水平镜像是将图像…

【OpenCV 例程200篇】30. 图像的缩放(cv2.resize)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】30. 图像的缩放(cv2.resize) 缩放只是调整图像的大小。 OpenCV 提供了 cv2.resize 函数,实现图像的缩放和大小变换 。 函数说明: cv2.resize(src, d…

JAVA50道经典编程题

加强对基础知识的巩固提升,拓展逻辑思维。 JAVA50道经典编程题: 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子…

【OpenCV 例程200篇】31. 图像金字塔(cv2.pyrDown)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】31. 图像金字塔(cv2.pyrDown) 扩展例程:1.40 图像金字塔 图像金字塔是一种以多分辨率来解释图像的结构,常用于图像分割、图像压缩和机器视觉。 在需要…

JQuery警报灯

利用鼠标点击改变背景颜色制作一个警报器,供大家参考! 请先看一下效果图:(警报器是蓝色的和点击之后警报器是红色的) 程序解说:首先要有一个警报器的样式和两个分别为打开警报器和关闭警报器的按钮&…

python里面的tuple与list对比

python里面的tuple与list对比 tuple 另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字: >>> classmates (Michael, Bob, Tracy)现在,classmates…

【OpenCV 例程200篇】32. 图像的扭变(错切)

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】32. 图像的扭变(错切) 图像的错切变换也称斜切,是指平面景物在投影平面上的非垂直投影,使图像中的图形在水平方向或垂直方向产生扭变。 以水平扭变为例…

【OpenCV 例程200篇】33. 图像的复合变换

『youcans 的 OpenCV 例程200篇 - 总目录』 【youcans 的 OpenCV 例程200篇】33. 图像的复合变换 图像的复合变换是指对给定的图像连续进行多次上述的平移、旋转、翻转、缩放、错切等基本变换,也称为级联变换。 对给定图像按一定顺序执行若干次基本变换&#xff0c…

表格生成器

能自动生成表格的小程序 当你在相应的输入框内输入表格的行高,列宽,多少行,多少列的数字后,点击创建表格就会自动生成你想要的表格。 未输入数据之前: 输入要生成表格数据之后点击创建表格:(为…