使用OpenCV实现仿射变换—旋转功能


Posted in Python onAugust 29, 2019

在前面实现了平移和缩放,还有一种常用的坐标变换,那就是旋转。比如拍摄的照片上传到电脑里,再打开时发现人的头在下面脚在上,这样肯定看不了,那么就需要把这个照片旋转180度才可以接受。由于旋转变换,都是绕着点进行运动的,首先要找到轴的位置,默认是原点(0,0),如果要指定点进行,那么要采用前面的平移操作,即是把图片移到这一点上,然后进行旋转,再把它平移回来,这样才可以完成。所以在这个操作过程里,就要多个矩阵进行操作了,先要进行平移矩阵相乘,再与旋转矩阵相乘,最后与反向平移矩阵相乘。旋转的操作都是使用角度方式来计算,因此要使用中学的知识—三角函数sin和cos等,如果对这些知识忘记了,可以回去复习一下中学知识,到这里就会发现数学的知识是非常有用的,特别是中学的知识。一般会解出方案如下:

使用OpenCV实现仿射变换—旋转功能

再加上齐次化,齐次化的目标主要为了把平移操作统一到一个公式里,就可以把公式写成这样:

使用OpenCV实现仿射变换—旋转功能

这个矩阵变换就是纯旋转的公式。一般情况下,会有平移和缩放一起操作,这样单独地去构造这些矩阵就有些麻烦了,为了简单起见,OpenCV提供了一个函数cv2.getRotationMatrix2D来完成这些操作,这个函数调用参数如下:

retval = cv.getRotationMatrix2D( center, angle, scale )

center是元组表示的旋转中心点。

angle是用度表示的旋转角度。

scale是缩放系数。

其实这个函数是计算这样的矩阵:

使用OpenCV实现仿射变换—旋转功能

所以在OpenCV里基本不需要自己去单独计算缩放和旋转的矩阵,调用此函数最简单了。下面通过例子来演示旋转的功能:

#python 3.7.4,opencv4.1
#蔡军生 https://blog.csdn.net/caimouse/article/details/51749579
#
import cv2
import numpy as np
 
#图片的路径
imgname = "img1.jpg"
 
#读取图片
image = cv2.imread(imgname, cv2.IMREAD_COLOR)
 
#图片的高度和宽度
h,w = image.shape[:2]
 
#构造缩放并旋转的2X3的矩阵,然后调用warpAffine执行
A1 = cv2.getRotationMatrix2D((w/2.0, h/2.0), 30, 0.5)
d1 = cv2.warpAffine(image, A1, (w, h), borderValue = 125)
 
#显示操作之后的图片
cv2.imshow("d1",d1)
 
#显示图像
cv2.imshow("image", image)
 
#等待用户输入,然后删除所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

输出结果如下:

使用OpenCV实现仿射变换—旋转功能

左边是旋转并缩放的图片,右边是原图。

上面的例子主要调用函数getRotationMatrix2D来构造矩阵,然后调用函数warpAffine来执行仿射变换操作。

总结

以上所述是小编给大家介绍的使用OpenCV实现仿射变换—旋转功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python图像灰度变换及图像数组操作
Jan 27 Python
python的random模块及加权随机算法的python实现方法
Jan 04 Python
初探TensorFLow从文件读取图片的四种方式
Feb 06 Python
python3实现网络爬虫之BeautifulSoup使用详解
Dec 19 Python
Python闭包和装饰器用法实例详解
May 22 Python
Linux下通过python获取本机ip方法示例
Sep 06 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
导入tensorflow:ImportError: libcublas.so.9.0 报错
Jan 06 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
Python脚本导出为exe程序的方法
Mar 25 Python
python基于opencv批量生成验证码的示例
Apr 28 Python
如何利用Python实现一个论文降重工具
Jul 09 Python
python+rsync精确同步指定格式文件
Aug 29 #Python
django-rest-swagger对API接口注释的方法
Aug 29 #Python
Python3视频转字符动画的实例代码
Aug 29 #Python
scikit-learn线性回归,多元回归,多项式回归的实现
Aug 29 #Python
python中property属性的介绍及其应用详解
Aug 29 #Python
django-rest-swagger的优化使用方法
Aug 29 #Python
使用虚拟环境打包python为exe 文件的方法
Aug 29 #Python
You might like
一个刚完成的layout(拖动流畅,不受iframe影响)
2007/08/17 Javascript
Google韩国首页图标动画效果
2007/08/26 Javascript
Javascript 键盘事件的组合使用实现代码
2012/05/04 Javascript
jQuery插件实现表格隔行变色及鼠标滑过高亮显示效果代码
2016/02/25 Javascript
实例解析jQuery中proxy()函数的用法
2016/05/24 Javascript
JavaScript中的this引用(推荐)
2016/08/05 Javascript
Node.js与Sails redis组件的使用教程
2017/02/14 Javascript
bootstrap警告框示例代码分享
2017/05/17 Javascript
nodejs socket服务端和客户端简单通信功能
2017/09/14 NodeJs
JS实现分页浏览横向图片(类轮播)实例代码
2017/11/06 Javascript
详解VUE 对element-ui中的ElTableColumn扩展
2018/03/28 Javascript
微信小程序项目实践之验证码倒计时功能
2018/07/18 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
原生JS实现无缝轮播图片
2020/06/24 Javascript
如何手写简易的 Vue Router
2020/10/10 Javascript
[01:10]DOTA2 Supermajor:英雄,由我们见证
2018/05/14 DOTA
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
pygame实现简易飞机大战
2018/09/11 Python
python通过SSH登陆linux并操作的实现
2019/10/10 Python
Python基于Dlib的人脸识别系统的实现
2020/02/26 Python
如何使用python socket模块实现简单的文件下载
2020/09/04 Python
迪卡侬印度官网:购买所有体育用品
2017/06/24 全球购物
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
网络方面基础面试题
2012/11/16 面试题
初中女生自我鉴定
2013/12/19 职场文书
《猫》教学反思
2014/02/26 职场文书
儿童生日会策划方案
2014/05/15 职场文书
妇联领导班子剖析材料
2014/08/21 职场文书
2014年秘书工作总结
2014/11/25 职场文书
2014年助理政工师工作总结
2014/12/19 职场文书
2015大学生自我评价范文
2015/03/03 职场文书
2015年“7.11”世界人口日宣传活动方案
2015/05/06 职场文书
使用Selenium实现微博爬虫(预登录、展开全文、翻页)
2021/04/13 Python
学会用Python实现滑雪小游戏,再也不用去北海道啦
2021/05/20 Python
JS创建或填充任意长度数组的小技巧汇总
2021/10/24 Javascript
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记