使用OpenCV实现仿射变换—平移功能


Posted in Python onAugust 29, 2019

当我们打开一个图片编辑软件时,基本上都会提供几个操作:平移、缩放和旋转。特别目前在手机里拍照时,由于位置传感器的失灵,也许是软件的BUG,有一次我就遇到苹果手机不管怎么样竖放,或横放,它拍摄的照片就竖不起来,后来只有关机重启才解决。这样拍摄出来的照片,如果要改变方向,只能使用编辑功能了,进行旋转。因此,几何变换的功能,在现实生活里的需求必不可少。

为了理解这个几何的问题,可以来回忆一下初中的课本内容:

使用OpenCV实现仿射变换—平移功能

从这里可以看到平移的基本性质,有了这些概念之后,就要进入解释几何,平移的表达,比如往x轴移动100,那么就是x+100,因此平移的公式就是(x1, y1)=(x+a, y+b),如下图所示:

使用OpenCV实现仿射变换—平移功能

从这个线性方程组来看,是一个二元的关系,再转换为矩阵的表示方式,你会发现使用的方式是如下:

使用OpenCV实现仿射变换—平移功能

在这里发现是使用三维矩阵来表示,为什么要这样呢?其实是为了把三种变换统一到一种表示方式,升维思想的作用。因此矩阵第三行没有什么作用的,如果一个图像要作平移,只要构造出变换矩阵,再作这个计算,就可以把坐标进行改变了,所以要平移的距离是由tx和ty决定。为了统一,旋转、缩放、平移都可以使用一个公式来表示和计算,这是升到三维数组的好处。同样在三维空间的变换,也是采用四维变换矩阵。下面通例子来演示图像平移的操作:

#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 = np.array([[1, 0, 50], [0, 1, 40]], np.float32)
d1 = cv2.warpAffine(image, A1, (w, h), borderValue = 125)
 
#显示平移之后的图片
cv2.imshow("d1",d1)
 
#显示图像
cv2.imshow("image", image)
 
#等待用户输入,然后删除所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()

执行的结果如下:

使用OpenCV实现仿射变换—平移功能

左图是平移之后的图片,在左上角出现了一片空白,使用了固定颜色填充,右图是原始图片。

在这里主要使用cv2.warpAffine函数,这个函数定义如下:

cv2.warpAffine(src, M, dsize[, dst[, flags[, borderMode[, borderValue]]]]) → dst

其中:

src - 输入图像。

M - 变换矩阵。

dsize - 输出图像的大小。

flags - 插值方法的组合(int 类型!)

borderMode - 边界像素模式(int 类型!)

borderValue - 边界填充值; 默认情况下,它为0。

上述参数中:M作为仿射变换矩阵,一般反映平移或旋转的关系,为InputArray类型的2×3的变换矩阵。

flages表示插值方式,默认为 flags=cv2.INTER_LINEAR,表示线性插值,此外还有:cv2.INTER_NEAREST(最近邻插值) cv2.INTER_AREA (区域插值) cv2.INTER_CUBIC(三次样条插值) cv2.INTER_LANCZOS4(Lanczos插值)

到这里学会了使用OpenCV中仿射变换的平移功能。

总结

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

Python 相关文章推荐
python和pyqt实现360的CLable控件
Feb 21 Python
使用Python的Bottle框架写一个简单的服务接口的示例
Aug 25 Python
基于Python和Scikit-Learn的机器学习探索
Oct 16 Python
Python3实现的简单验证码识别功能示例
May 02 Python
Linux CentOS Python开发环境搭建教程
Nov 28 Python
Django命名URL和反向解析URL实现解析
Aug 09 Python
Python imutils 填充图片周边为黑色的实现
Jan 19 Python
python检查目录文件权限并修改目录文件权限的操作
Mar 11 Python
Python Selenium 设置元素等待的三种方式
Mar 18 Python
pytorch cuda上tensor的定义 以及减少cpu的操作详解
Jun 23 Python
Python reques接口测试框架实现代码
Jul 28 Python
Python中相见恨晚的技巧
Apr 13 Python
python网络编程 使用UDP、TCP协议收发信息详解
Aug 29 #Python
使用OpenCV实现仿射变换—缩放功能
Aug 29 #Python
python实现两个文件夹的同步
Aug 29 #Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 #Python
python+rsync精确同步指定格式文件
Aug 29 #Python
django-rest-swagger对API接口注释的方法
Aug 29 #Python
Python3视频转字符动画的实例代码
Aug 29 #Python
You might like
浅谈php错误提示及查错方法
2015/07/14 PHP
PHP动态地创建属性和方法, 对象的复制, 对象的比较,加载指定的文件,自动加载类文件,命名空间
2016/05/06 PHP
PHP严重致命错误处理:php Fatal error: Cannot redeclare class or function
2017/02/05 PHP
PHP基于ICU扩展intl快速实现汉字转拼音及按拼音首字母分组排序的方法
2017/05/03 PHP
php 截取中英文混合字符串的方法
2018/05/31 PHP
laravel框架之数据库查出来的对象实现转化为数组
2019/10/23 PHP
JQery 渐变图片导航效果代码 漂亮
2010/01/01 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
jQuery zclip插件实现跨浏览器复制功能
2015/11/02 Javascript
微信小程序中的swiper组件详解
2017/04/14 Javascript
Vuejs2 + Webpack框架里,模拟下载的实例讲解
2018/09/05 Javascript
小程序input数据双向绑定实现方法
2019/10/17 Javascript
Vue+ElementUI使用vue-pdf实现预览功能
2019/11/26 Javascript
bootstrap-closable-tab可实现关闭的tab标签页插件
2020/08/09 Javascript
[01:14:34]DOTA2上海特级锦标赛C组资格赛#2 LGD VS Newbee第一局
2016/02/28 DOTA
Python的Django中将文件上传至七牛云存储的代码分享
2016/06/03 Python
Python 2与Python 3版本和编码的对比
2017/02/14 Python
Python迭代器与生成器基本用法分析
2018/07/26 Python
PyQt Qt Designer工具的布局管理详解
2019/08/07 Python
Python cookie的保存与读取、SSL讲解
2020/02/17 Python
印度最大的旅游网站:MakeMyTrip
2016/10/05 全球购物
TripAdvisor瑞典:全球领先的旅游网站
2017/12/11 全球购物
美国领先的医疗警报服务:Philips Lifeline
2018/03/12 全球购物
Fenty Beauty官网:蕾哈娜创立的美妆品牌
2021/01/07 全球购物
药物学专业学生的自我评价
2013/10/27 职场文书
十岁生日父母答谢词
2014/01/18 职场文书
网上快餐厅创业计划书
2014/02/01 职场文书
给校长的一封建议书
2014/03/12 职场文书
信息技术毕业生自荐信范文
2014/03/13 职场文书
聘用意向书范本
2014/04/01 职场文书
交警作风整顿剖析材料
2014/10/11 职场文书
结婚通知短信怎么写
2015/04/17 职场文书
Python Parser的用法
2021/05/12 Python
基于HTML十秒做出淘宝页面
2021/10/24 HTML / CSS
Hive常用日期格式转换语法
2022/06/25 数据库