详解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使用递归解决全排列数字示例
Feb 11 Python
python中文编码问题小结
Sep 28 Python
采用Psyco实现python执行速度提高到与编译语言一样的水平
Oct 11 Python
基于python3 类的属性、方法、封装、继承实例讲解
Sep 19 Python
Python实现购物车功能的方法分析
Nov 10 Python
python导入模块交叉引用的方法
Jan 19 Python
利用python实现汉字转拼音的2种方法
Aug 12 Python
python实现猜拳小游戏
Apr 05 Python
VSCode基础使用与VSCode调试python程序入门的图文教程
Mar 30 Python
python算的上脚本语言吗
Jun 22 Python
Pycharm及python安装详细教程(图解)
Jul 31 Python
pycharm最新激活码有效期至2100年(亲测可用)
Feb 05 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
文章推荐系统(三)
2006/10/09 PHP
ZF等常用php框架中存在的问题
2008/01/10 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
destoon实现资讯信息前面调用它所属分类的方法
2014/07/15 PHP
Codeigniter通过SimpleXML将xml转换成对象的方法
2015/03/19 PHP
PHP实现获取中英文首字母
2015/06/19 PHP
jquery之Document元素选择器篇
2008/08/14 Javascript
Prototype使用指南之selector.js说明
2008/10/26 Javascript
javascript XMLHttpRequest对象全面剖析
2010/04/24 Javascript
javascript动态改变img的src属性图片不显示的解决方法
2010/10/20 Javascript
jQuery Tools tooltip使用说明
2012/07/14 Javascript
JS中怎样判断undefined(比较不错的方法)
2014/03/27 Javascript
jQuery手机浏览器中拖拽动作的艰难性分析
2015/02/04 Javascript
jQuery选择器源码解读(四):tokenize方法的Expr.preFilter
2015/03/31 Javascript
js实现固定显示区域内自动缩放图片的方法
2015/07/18 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
Bootstrap简单表单显示学习笔记
2016/11/15 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
详解NodeJs开发微信公众号
2018/05/25 NodeJs
详解vuex 渐进式教程实例代码
2018/11/27 Javascript
如何测量vue应用运行时的性能
2019/06/21 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
2020/10/29 Javascript
JavaScript中的Proxy对象
2020/11/27 Javascript
Ubuntu 14.04+Django 1.7.1+Nginx+uwsgi部署教程
2014/11/18 Python
浅谈Python生成器generator之next和send的运行流程(详解)
2017/05/08 Python
获取django框架orm query执行的sql语句实现方法分析
2019/06/20 Python
PyTorch和Keras计算模型参数的例子
2020/01/02 Python
关于Keras模型可视化教程及关键问题的解决
2020/01/24 Python
Python使用GitPython操作Git版本库的方法
2020/02/29 Python
购买200个世界上最好的内衣品牌:Bare Necessities
2017/02/11 全球购物
简述你对Statement,PreparedStatement,CallableStatement的理解
2013/03/25 面试题
大学毕业生最详细的自我评价分享
2013/11/18 职场文书
优秀教育工作者事迹材料
2014/12/24 职场文书
会议承办单位欢迎词
2015/09/30 职场文书
Ubuntu18.04下QT开发Android无法连接设备问题解决实现
2022/06/01 Java/Android