Python OpenCV 图像平移的实现示例


Posted in Python onJune 04, 2021

每次学习新东西的时候,橡皮擦都是去海量检索,然后找到适合自己理解的部分。

再将其拼凑成一个小的系统,争取对该内容有初步理解。

今天这 1 个小时,核心要学习的是图像的平移,在电脑上随便打开一张图片,实现移动都非常简单,但是在代码中,出现了一些新的概念。

检索 OpenCV 图像平移相关资料时,碰到的第一个新概念是就是 仿射变换

每次看到这样子的数学名字,必然心中一凉,做为一个数学小白,又要瑟瑟发抖了。

百度一下,看看百科中是如何介绍的。

Python OpenCV 图像平移的实现示例

看过上图中的一些相关简介之后,对于这个概念也并没有太深刻的理解,本着先用起来,在补充理论的学习观点,我们先实现图像平移。

学习过程中,碰到一些概念性的东西,可以先应用起来,然后在后续的深入学习过程中,逐步去完善它们。

cv2.warpAffine() 仿射变换

基于该方法去寻找相关资料,得到仿射变换的基本概念,从二维坐标到二维坐标之间的线性变换,并且要保持二维图形的“平直性” 和 “平行性”。

仿射变换中,包含平移,缩放,翻转,旋转,剪切。

该方法的语法结构如下:

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

参数说明:

  • src:输入图像
  • M:2*3 transformation matrix (转变矩阵)
  • dsize:输出图像的大小,格式为(cols,rows),width 对应 cols,height 对应 rows
  • flags: 可选参数,插值方法的组合(int 类型),默认值 INTER_LINEAR
  • borderMode:可选参数,边界像素模式(int 类型),默认值 BORDER_CONSTANT
  • borderValue:可选参数,边界填充值; 默认情况下,默认值 Scalar()即 0

官方可查阅的英文资料如下:

Python OpenCV 图像平移的实现示例

插值方式(flags)有如下类型:

  • INTER_LINEAR 线性插值
  • INTER_NEAREST 最近邻插值
  • INTER_AREA 区域插值
  • INTER_CUBIC 三次样条插值
  • INTER_LANCZOS4 Lanczos 插值

一般情况下,使用 wrapAffine 前三个参数,即 warpAffine(img,M,(rows,cols)) 实现基本的仿射变换效果,但是这种情况会出现 黑边 现象。

最后一个参数为 borderValue,边界填充的颜色,默认为黑色,可以自行设置为其它颜色。

具体代码

图像平移是图像位置的移动。在平移前,需要先转换矩阵 M,,其中 txty 表示在(x,y)方向上的位移,如下所示:

Python OpenCV 图像平移的实现示例

测试代码如下,重要部分在注释中进行说明。

import numpy as np
import cv2 as cv

img = cv.imread('10.jpg', 1)
rows, cols, channels = img.shape
# [1,0,100] 右移 100, [0,1,50] 下移 50
M = np.float32([[1, 0, 100], [0, 1, 50]])
res = cv.warpAffine(img, M, (cols, rows))
cv.imshow("img", res)
cv.waitKey()

特别说明:
cv.warpAffine 方法的第三个参数是输出图像的大小,其形式应为(width,height)。记住 width =列数(cols),height =行数(rows)。

以下为代码运行结果。

Python OpenCV 图像平移的实现示例

关于 borderMode 参数值的说明:

该部分内容涉及边缘处理,翻阅手册过程找到的说明指向 BorderTypes。翻阅了一下,依旧是有些超纲,可以先记录下相关内容,日后在进行回顾,参考地址

所有值罗列如下:

  • BORDER_CONSTANT = 0
  • BORDER_REPLICATE = 1
  • BORDER_REFLECT = 2
  • BORDER_WRAP = 3
  • BORDER_REFLECT_101 = 4
  • BORDER_TRANSPARENT = 5
  • BORDER_REFLECT101 = BORDER_REFLECT_101
  • BORDER_DEFAULT = BORDER_REFLECT_101
  • BORDER_ISOLATED = 16

Python OpenCV 图像平移的实现示例

borderValue:当图像边界处理方式为 BORDER_CONSTANT 时的填充值。

测试代码如下:

import numpy as np
import cv2 as cv

img = cv.imread('10.jpg', 1)
rows, cols, channels = img.shape
M = np.float32([[1, 0, 100], [0, 1, 50]])
res = cv.warpAffine(img, M, (cols, rows),
                    borderMode=cv.BORDER_CONSTANT, borderValue=(200, 66, 66))
cv.imshow("img", res)
cv.waitKey()

OpenCV 尾声

到此这篇关于Python OpenCV 图像平移的实现示例的文章就介绍到这了,更多相关OpenCV 图像平移内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
PHP魔术方法__ISSET、__UNSET使用实例
Nov 25 Python
python模拟鼠标拖动操作的方法
Mar 11 Python
Python获取运行目录与当前脚本目录的方法
Jun 01 Python
利用python打印出菱形、三角形以及矩形的方法实例
Aug 08 Python
Python创建普通菜单示例【基于win32ui模块】
May 09 Python
python主线程捕获子线程的方法
Jun 17 Python
Python如何基于rsa模块实现非对称加密与解密
Jan 03 Python
python求一个字符串的所有排列的实现方法
Feb 04 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
python 轮询执行某函数的2种方式
May 03 Python
解决pycharm不能自动保存在远程linux中的问题
Feb 06 Python
Python echarts实现数据可视化实例详解
Mar 03 Python
Python包argparse模块常用方法
Jun 04 #Python
opencv读取视频并保存图像的方法
Python还能这么玩之用Python做个小游戏的外挂
Jun 04 #Python
python opencv旋转图片的使用方法
Python还能这么玩之用Python修改了班花的开机密码
Anaconda安装pytorch及配置PyCharm 2021环境
python如何利用cv2模块读取显示保存图片
Jun 04 #Python
You might like
PHP 类型转换函数intval
2009/06/20 PHP
php学习笔记 面向对象中[接口]与[多态性]的应用
2011/06/16 PHP
PHP同时连接多个mysql数据库示例代码
2014/03/17 PHP
浅谈PHP中单引号和双引号到底有啥区别呢?
2015/03/04 PHP
递归实现php数组转xml的代码分享
2015/05/14 PHP
在CentOS上搭建LAMP+vsftpd环境的简单指南
2015/08/01 PHP
PHP文件操作之获取目录下文件与计算相对路径的方法
2016/01/08 PHP
Yii针对添加行的增删改查操作示例
2016/10/18 PHP
jquery 插件 任意位置浮动固定层
2008/12/25 Javascript
javascript 一个函数对同一元素的多个事件响应
2009/07/25 Javascript
JavaScript+CSS实现仿天猫侧边网页菜单效果
2015/08/25 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
JavaScript类型系统之基本数据类型与包装类型
2016/01/06 Javascript
javascript实现瀑布流加载图片原理
2016/02/02 Javascript
解析Node.js基于模块和包的代码部署方式
2016/02/16 Javascript
Bootstrap弹出带合法性检查的登录框实例代码【推荐】
2016/06/23 Javascript
浅谈JavaScript 覆盖原型以及更改原型
2016/08/31 Javascript
使用vue-router为每个路由配置各自的title
2018/07/30 Javascript
JS使用对象的defineProperty进行变量监控操作示例
2019/02/02 Javascript
JavaScript 性能提升之路(推荐)
2019/04/10 Javascript
CountUp.js实现数字滚动增值效果
2019/10/17 Javascript
Vue实现可移动水平时间轴
2020/06/29 Javascript
python获取代理IP的实例分享
2018/05/07 Python
Python3爬虫使用Fidder实现APP爬取示例
2018/11/27 Python
Python 把序列转换为元组的函数tuple方法
2019/06/27 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
django实现支付宝支付实例讲解
2019/10/17 Python
基于Python的身份证验证识别和数据处理详解
2020/11/14 Python
意大利领先的线上奢侈品销售电商:Eleonora Bonucci
2017/10/17 全球购物
VICHY薇姿俄罗斯官方网上商店:法国护肤品牌,火山温泉水
2019/11/22 全球购物
活动总结报告范文
2014/05/04 职场文书
化学专业大学生职业生涯规划范文
2014/09/13 职场文书
行政秘书工作自我鉴定
2014/09/15 职场文书
2014年煤矿安全工作总结
2014/12/04 职场文书
安全生产学习心得体会
2016/01/18 职场文书
十大动画制作软件,Adobe产品上榜两款,第一是行业标准软件
2022/03/18 杂记