使用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实现支持目录FTP上传下载文件的方法
Jun 03 Python
Python中json格式数据的编码与解码方法详解
Jul 01 Python
Python编程实现数学运算求一元二次方程的实根算法示例
Apr 02 Python
安装Python的教程-Windows
Jul 22 Python
pygame实现俄罗斯方块游戏
Jun 26 Python
对numpy中向量式三目运算符详解
Oct 31 Python
python实现剪切功能
Jan 23 Python
pyqt5 禁止窗口最大化和禁止窗口拉伸的方法
Jun 18 Python
Python使用Pandas读写Excel实例解析
Nov 19 Python
Python实现发票自动校核微信机器人的方法
May 22 Python
使用keras2.0 将Merge层改为函数式
May 23 Python
python批量检查两个对应的txt文件的行数是否一致的实例代码
Oct 31 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性能优化准备篇图解PEAR安装
2011/12/05 PHP
CodeIgniter框架中_remap()使用方法2例
2014/03/10 PHP
php生成图片验证码-附五种验证码
2015/08/19 PHP
Laravel基础-关于引入公共文件的两种方式
2019/10/18 PHP
通过代码实例解析PHP session工作原理
2020/12/11 PHP
Web 前端设计模式--Dom重构 提高显示性能
2010/10/22 Javascript
js前台判断开始时间是否小于结束时间
2012/02/23 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
JS简单操作select和dropdownlist实例
2014/11/26 Javascript
js随机生成网页背景颜色的方法
2015/02/26 Javascript
基于javascript实现单选及多选的向右和向左移动实例
2015/07/25 Javascript
JS实现淘宝支付宝网站的控制台菜单效果
2015/09/28 Javascript
深入解析Javascript闭包的功能及实现方法
2016/07/10 Javascript
JS中正则表达式要注意lastIndex属性
2017/08/08 Javascript
详解开源的JavaScript插件化框架MinimaJS
2017/10/26 Javascript
JS使用setInterval实现的简单计时器功能示例
2018/04/19 Javascript
基于Vue2x实现响应式自适应轮播组件插件VueSliderShow功能
2018/05/16 Javascript
Vue+Webpack完美整合富文本编辑器TinyMce的方法
2018/11/30 Javascript
详解使用webpack+electron+reactJs开发windows桌面应用
2019/02/01 Javascript
JS散列表碰撞处理、开链法、HashTable散列示例
2019/02/08 Javascript
Vue中import from的来源及省略后缀与加载文件夹问题
2020/02/09 Javascript
浅谈Vue3 Composition API如何替换Vue Mixins
2020/04/29 Javascript
pygame学习笔记(5):游戏精灵
2015/04/15 Python
详解Python中的Descriptor描述符类
2016/06/14 Python
python实现壁纸批量下载代码实例
2018/01/25 Python
python通过微信发送邮件实现电脑关机
2018/06/20 Python
PyCharm设置护眼背景色的方法
2018/10/29 Python
浅谈Python中的继承
2020/06/19 Python
CSS3的Flexbox布局的简明入门指南
2016/04/08 HTML / CSS
html5 figure和figcaption的使用方法
2018/09/10 HTML / CSS
详解HTML5如何使用可选样式表为网站或应用添加黑暗模式
2020/04/07 HTML / CSS
美国顶级奢侈茶:Mighty Leaf Tea(美泰茶)
2016/11/26 全球购物
西门豹教学反思
2014/02/04 职场文书
高中竞选班长演讲稿
2014/04/24 职场文书
死亡诗社观后感
2015/06/05 职场文书
python编写五子棋游戏
2021/05/25 Python