详解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 相关文章推荐
python自动化测试之连接几组测试包实例
Sep 28 Python
Python的类实例属性访问规则探讨
Jan 30 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
python基于物品协同过滤算法实现代码
May 31 Python
Windows下python3.7安装教程
Jul 31 Python
解决python3中cv2读取中文路径的问题
Dec 05 Python
Python3中函数参数传递方式实例详解
May 05 Python
如何使用pyinstaller打包32位的exe程序
May 26 Python
Python TCP通信客户端服务端代码实例
Nov 21 Python
python turtle工具绘制四叶草的实例分享
Feb 14 Python
Python类绑定方法及非绑定方法实例解析
Oct 09 Python
Autopep8的使用(python自动编排工具)
Mar 02 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 strncasecmp字符串比较的小技巧
2011/01/04 PHP
php缓冲 output_buffering的使用详解
2013/06/13 PHP
php基于协程实现异步的方法分析
2019/07/17 PHP
用js实现的仿sohu博客更换页面风格(简单版)
2007/03/22 Javascript
麻雀虽小五脏俱全 Dojo自定义控件应用
2010/09/04 Javascript
减少访问DOM的次数提升javascript性能
2014/02/24 Javascript
javascript中call和apply的用法示例分析
2015/04/02 Javascript
location.hash保存页面状态的技巧
2016/04/28 Javascript
Ajax与服务器(JSON)通信实例代码
2016/11/05 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
AngularJS+bootstrap实现动态选择商品功能示例
2017/05/17 Javascript
使用AngularJS对表单提交内容进行验证的操作方法
2017/07/12 Javascript
Node.js pipe实现源码解析
2017/08/12 Javascript
jQuery结合jQuery.cookie.js插件实现换肤功能示例
2017/10/14 jQuery
详解angular分页插件tm.pagination二次触发问题解决方案
2018/07/20 Javascript
对vue中methods互相调用的方法详解
2018/08/30 Javascript
javascript事件监听与事件委托实例详解
2019/08/16 Javascript
vue实现多级菜单效果
2019/10/19 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
vue实现户籍管理系统
2020/05/29 Javascript
python 切片和range()用法说明
2013/03/24 Python
Python和php通信乱码问题解决方法
2014/04/15 Python
python编写朴素贝叶斯用于文本分类
2017/12/21 Python
python画折线图的程序
2018/07/26 Python
python ipset管理 增删白名单的方法
2019/01/14 Python
python实现批处理文件
2020/07/28 Python
Python从文件中读取数据的方法步骤
2020/11/18 Python
美国知名平价彩妆品牌:e.l.f. Cosmetics
2017/11/20 全球购物
漫威玩具服装及周边商品官方购物网站:Marvel Shop
2019/05/11 全球购物
清扬洗发水广告词
2014/03/14 职场文书
艺术设计专业求职自荐信
2014/05/19 职场文书
2015年宣传思想工作总结
2015/05/22 职场文书
超市员工管理制度
2015/08/06 职场文书
QT连接MYSQL数据库的详细步骤
2021/07/07 MySQL
mysql5.7的安装及Navicate长久免费使用的实现过程
2021/11/17 MySQL