使用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中Django框架利用url来控制登录的方法
Jul 25 Python
Python字符编码判断方法分析
Jul 01 Python
200行自定义python异步非阻塞Web框架
Mar 15 Python
numpy.delete删除一列或多列的方法
Apr 03 Python
Python3批量生成带logo的二维码方法
Jun 24 Python
tensor和numpy的互相转换的实现示例
Aug 02 Python
Pycharm创建项目时如何自动添加头部信息
Nov 14 Python
python对Excel按条件进行内容补充(推荐)
Nov 24 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
django实现后台显示媒体文件
Apr 07 Python
使用Python下载抖音各大V视频的思路详解
Feb 06 Python
Pycharm 如何设置HTML文件自动补全代码或标签
May 21 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
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
JS面向对象、prototype、call()、apply()
2009/05/14 Javascript
Javascript document.referrer判断访客来源网址
2020/05/15 Javascript
javascript中的nextSibling使用陷(da)阱(keng)
2014/05/05 Javascript
javascript操纵OGNL标签示例代码
2014/06/16 Javascript
js实例属性和原型属性示例详解
2014/11/23 Javascript
JS控制页面跳转时未请求要跳转的地址怎么回事
2016/10/14 Javascript
关于Jquery中的bind(),on()绑定事件方式总结
2016/10/26 Javascript
使用Curl命令查看请求响应时间方法
2016/11/04 Javascript
获取JavaScript异步函数的返回值
2016/12/21 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
老生常谈ES6中的类
2017/07/31 Javascript
jQuery Datatable 多个查询条件自定义提交事件(推荐)
2017/08/24 jQuery
js 将canvas生成图片保存,或直接保存一张图片的实现方法
2018/01/02 Javascript
基于vue 开发中出现警告问题去除方法
2018/01/25 Javascript
微信小程序webview实现长按点击识别二维码功能示例
2019/01/24 Javascript
你或许不知道的一些npm实用技巧
2019/07/04 Javascript
Vue Element UI + OSS实现上传文件功能
2019/07/31 Javascript
微信小程序pinker组件使用实现自动相减日期
2020/05/07 Javascript
Windows和Linux下使用Python访问SqlServer的方法介绍
2015/03/10 Python
Python中的条件判断语句与循环语句用法小结
2016/03/21 Python
Python实现两个list对应元素相减操作示例
2017/06/09 Python
python2.x实现人民币转大写人民币
2018/06/20 Python
Python打包模块wheel的使用方法与将python包发布到PyPI的方法详解
2020/02/12 Python
Opencv图像处理:如何判断图片里某个颜色值占的比例
2020/06/03 Python
python 制作网站小说下载器
2021/02/20 Python
收藏!10个免费高清视频素材网站!【设计、视频剪辑必备】
2021/03/18 杂记
什么时候用assert
2015/05/08 面试题
通信工程毕业生求职信
2013/11/16 职场文书
酒店前台接待岗位职责
2013/12/03 职场文书
面料业务员岗位职责
2013/12/26 职场文书
致跳高运动员加油稿
2014/02/12 职场文书
团日活动总结范文
2014/04/25 职场文书
企业文化理念标语
2014/06/10 职场文书
党性观念心得体会
2014/09/03 职场文书
CSS使用Flex和Grid布局实现3D骰子
2022/08/05 HTML / CSS