详解python-图像处理(映射变换)


Posted in Python onMarch 22, 2019

做计算机视觉方向,除了流行的各种深度学习算法,很多时候也要会基础的图像处理方法。

记录下opencv的一些操作(图像映射变换),日后可以方便使用

先上一张效果图

详解python-图像处理(映射变换)

图二和图三是同一种方法,只是变换矩阵不同,都是3点映射变换

图四使用的是4点映射变换

简单介绍下原理

图像都知道是3维(通道)的矩阵,前两维就是由1字节(0-255)数字填充的二维数组。数字大小代表颜色的深浅。

我们把变换前的原图作为x和y。变换后的图为u和v。将[x,y,1]乘上变换矩阵就可以得到对应的新的u和v。不同的变换矩阵有不同的作用(不同的变换方式)

详解python-图像处理(映射变换)

所以现在就是求不同变换对应的不同的变换矩阵的过程

求这个矩阵 在opencv中直接就有方法

只需提供原图的三个点和你要变换之后的三个点的映射位置(3个原图点,3个映射点)就可以求出这个变换矩阵

详解python-图像处理(映射变换)详解python-图像处理(映射变换)

当然了 你会发现不管怎么调整映射点 都不能任意变换

因为只给三个点时 变换之后的图其实只是原图的等比缩放,并不能做到随意映射的效果

这里opencv也提供了 四个点和四个映射的方法 求出对应的变换矩阵 ,最终得到任意映射的效果

详解python-图像处理(映射变换)

代码如下:

# coding=gbk
import cv2
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.sans-serif']=['SimHei'] #用来正常显示中文标签
plt.rcParams['axes.unicode_minus']=False #用来正常显示负号

img=cv2.imread(r"test6.jpg")
img = img[:,:,[2,1,0]]
cols,rows,ch=img.shape

pts1 = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1]])         #三点映射
pts2 = np.float32([[0, 0], [cols - 1, 0], [80, rows - 1]])
pts21 = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1]])
pts22 = np.float32([[cols * 0.2, rows * 0.1], [cols * 0.9, rows * 0.2], [cols * 0.1, rows * 0.9]])
pts31 = np.float32([[0, 0], [cols - 1, 0], [0, rows - 1],[cols - 1,rows-1]])    #四点映射
pts32 = np.float32([[0, 0], [cols - 1, 0], [50, rows - 1],[cols - 50,rows-50]])

M = cv2.getAffineTransform(pts1,pts2)              #求三点映射的变换矩阵
M2= cv2.getAffineTransform(pts21,pts22)
M3 = cv2.getPerspectiveTransform(pts31,pts32)            #求四点映射的变换矩阵

dst = cv2.warpAffine(img,M,(rows+120,cols))            #三点映射的变换函数
dst2 = cv2.warpAffine(img,M2,(rows,cols))            
dst3 = cv2.warpPerspective(img,M3,(rows+40,cols+50))          #四点映射的变换函数

plt.subplot(221)
plt.imshow(img)
plt.title("原图")
plt.subplot(222)
plt.imshow(dst)
plt.title("投影变换")
plt.subplot(223)
plt.imshow(dst2)
plt.title("仿射原图变换")
plt.subplot(224)
plt.imshow(dst3)
plt.title("仿射不规则变换")

plt.show()

以上所述是小编给大家介绍的python-图像处理(映射变换)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Python 相关文章推荐
合并百度影音的离线数据( with python 2.3)
Aug 04 Python
数组保存为txt, npy, csv 文件, 数组遍历enumerate的方法
Jul 09 Python
Python初学者需要注意的事项小结(python2与python3)
Sep 26 Python
python使用requests.session模拟登录
Aug 09 Python
python 进程间数据共享multiProcess.Manger实现解析
Sep 23 Python
基于Python爬取爱奇艺资源过程解析
Mar 02 Python
mac 上配置Pycharm连接远程服务器并实现使用远程服务器Python解释器的方法
Mar 19 Python
pycharm部署、配置anaconda环境的教程
Mar 24 Python
python实现飞船游戏的纵向移动
Apr 24 Python
Python是什么 Python的用处
May 26 Python
Python基础之常用库常用方法整理
Apr 30 Python
Python利用zhdate模块实现农历日期处理
Mar 31 Python
python中如何使用分步式进程计算详解
Mar 22 #Python
浅谈Python基础—判断和循环
Mar 22 #Python
浅谈python常用程序算法
Mar 22 #Python
python实现移位加密和解密
Mar 22 #Python
python实现可逆简单的加密算法
Mar 22 #Python
python实现字符串加密 生成唯一固定长度字符串
Mar 22 #Python
详解Python循环作用域与闭包
Mar 21 #Python
You might like
基于php实现随机合并数组并排序(原排序)
2015/11/26 PHP
JavaScript-世界上误解最深的语言分析
2007/08/12 Javascript
jquery键盘事件使用介绍
2011/11/01 Javascript
ie7+背景透明文字不透明超级简单的实现方法
2014/01/17 Javascript
浅析javascript操作 cookie对象
2014/12/26 Javascript
javascript轻量级库createjs使用Easel实现拖拽效果
2016/02/19 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
2016/04/05 Javascript
AngularJS 与Bootstrap实现表格分页实例代码
2016/10/14 Javascript
JavaScript中全选、全不选、反选、无刷新删除、批量删除、即点即改入库(在yii框架中操作)的代码分享
2016/11/01 Javascript
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
angularjs路由传值$routeParams详解
2020/09/05 Javascript
JsChart组件使用详解
2018/03/04 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
详解基于iview-ui的导航栏路径(面包屑)配置
2019/02/22 Javascript
layui异步加载table表中某一列数据的例子
2019/09/16 Javascript
node.js使用http模块创建服务器和客户端完整示例
2020/02/10 Javascript
vue实现点击按钮“查看详情”弹窗展示详情列表操作
2020/09/09 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
UEditor 自定义图片视频尺寸校验功能的实现代码
2020/10/20 Javascript
python脚本爬取字体文件的实现方法
2017/04/29 Python
学习python中matplotlib绘图设置坐标轴刻度、文本
2018/02/07 Python
Python+selenium 获取一组元素属性值的实例
2018/06/22 Python
Python使用ctypes调用C/C++的方法
2019/01/29 Python
python使用rsa非对称加密过程解析
2019/12/28 Python
详解python中的闭包
2020/09/07 Python
应届大学生求职信
2013/12/01 职场文书
家庭困难证明
2014/10/12 职场文书
2014年妇产科工作总结
2014/12/08 职场文书
上课迟到检讨书范文
2015/05/06 职场文书
《七律·长征》教学反思
2016/02/16 职场文书
《蜜蜂引路》教学反思
2016/02/22 职场文书
2019通用版导游词范本!
2019/08/07 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
MySQL 存储过程的优缺点分析
2021/05/20 MySQL
python Django框架快速入门教程(后台管理)
2021/07/21 Python