详解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中实现php的var_dump函数功能
Jan 21 Python
Python列表(list)常用操作方法小结
Feb 02 Python
Python的多态性实例分析
Jul 07 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
对Python中的@classmethod用法详解
Apr 21 Python
python迭代dict的key和value的方法
Jul 06 Python
10分钟教你用Python实现微信自动回复功能
Nov 28 Python
Django模板导入母版继承和自定义返回Html片段过程解析
Sep 18 Python
Python FTP文件定时自动下载实现过程解析
Nov 12 Python
使用NumPy读取MNIST数据的实现代码示例
Nov 20 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
Sep 22 Python
基于Django集成CAS实现流程详解
Nov 28 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
第十四节 命名空间 [14]
2006/10/09 PHP
php官方微信接口大全(微信支付、微信红包、微信摇一摇、微信小店)
2015/12/21 PHP
PHP实现微信支付(jsapi支付)流程步骤详解
2018/03/15 PHP
jQuery Ajax之load()方法
2009/10/12 Javascript
HTML页面弹出居中可拖拽的自定义窗口层
2014/05/07 Javascript
javascript动态判断html元素并执行不同的操作
2014/06/16 Javascript
根据配置文件加载js依赖模块
2014/12/29 Javascript
javascript验证身份证号
2015/03/03 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
jquery实现仿新浪微博评论滚动效果
2015/08/06 Javascript
JavaScript设计模式之单例模式原理与用法实例分析
2018/07/26 Javascript
详解async/await 异步应用的常用场景
2019/05/13 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
seajs和requirejs模块化简单案例分析
2019/08/26 Javascript
Vue 实现复制功能,不需要任何结构内容直接复制方式
2019/11/09 Javascript
微信小程序收藏功能的实现代码
2020/06/19 Javascript
Python3写入文件常用方法实例分析
2015/05/22 Python
详解在Python中处理异常的教程
2015/05/24 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
Python不使用int()函数把字符串转换为数字的方法
2018/07/09 Python
Python使用pymongo模块操作MongoDB的方法示例
2018/07/20 Python
使用Python向DataFrame中指定位置添加一列或多列的方法
2019/01/29 Python
Python动态声明变量赋值代码实例
2019/12/30 Python
Python实现动态循环输出文字功能
2020/05/07 Python
python飞机大战游戏实例讲解
2020/12/04 Python
matplotlib制作雷达图报错ValueError的实现
2021/01/05 Python
HTML5触摸事件(touchstart、touchmove和touchend)的实现
2020/05/08 HTML / CSS
我的applet原先好好的, 一放到web server就会有问题,为什么?
2016/05/10 面试题
.net开发工程师面试题
2014/02/25 面试题
文体活动实施方案
2014/03/27 职场文书
师范学院毕业生求职信
2014/06/24 职场文书
小学运动会演讲稿
2014/08/25 职场文书
服务承诺书
2015/01/19 职场文书
新教师教学工作总结
2015/08/12 职场文书
python爬不同图片分别保存在不同文件夹中的实现
2021/04/02 Python
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android