详解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下的XSLT API进行web开发的简单教程
Apr 15 Python
探究Python的Tornado框架对子域名和泛域名的支持
May 02 Python
Python随机生成带特殊字符的密码
Mar 02 Python
Python中强大的命令行库click入门教程
Dec 26 Python
Python实现注册登录系统
Aug 08 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
通过python爬虫赚钱的方法
Jan 29 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python匿名函数用法实例分析
Aug 03 Python
调试Django时打印SQL语句的日志代码实例
Sep 12 Python
解决python运行效率不高的问题
Jul 20 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 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文本数据库的搜索方法
2006/10/09 PHP
php array的学习笔记
2012/05/16 PHP
PHP删除HTMl标签的实现代码
2013/06/30 PHP
php常用文件操作函数汇总
2014/11/22 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
Linux(CentOS)下PHP扩展PDO编译安装的方法
2016/04/07 PHP
php时间函数用法分析
2016/05/28 PHP
Laravel中的Auth模块详解
2017/08/17 PHP
Alliance vs Liquid BO3 第三场2.13
2021/03/10 DOTA
JS的replace方法介绍
2012/10/20 Javascript
jQuery中index()的用法分析
2014/09/05 Javascript
JavaScript结合AJAX_stream实现流式显示
2015/01/08 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
Vue2.0点击切换类名改变样式的方法
2018/08/22 Javascript
手挽手带你学React之React-router4.x的使用
2019/02/14 Javascript
layui操作列按钮个数和文字颜色的判断实例
2019/09/11 Javascript
Node.js API详解之 assert模块用法实例分析
2020/05/26 Javascript
原生JavaScript实现随机点名表
2021/01/14 Javascript
[40:50]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第四场
2014/05/24 DOTA
在Python的Flask框架下收发电子邮件的教程
2015/04/21 Python
python输出当前目录下index.html文件路径的方法
2015/04/28 Python
详解python eval函数的妙用
2017/11/16 Python
Python实现KNN邻近算法
2021/01/28 Python
Python模拟登录的多种方法(四种)
2018/06/01 Python
Python获取二维数组的行列数的2种方法
2020/02/11 Python
Python 解析库json及jsonpath pickle的实现
2020/08/17 Python
HTML5事件方法全部汇总
2016/05/12 HTML / CSS
美国渔具店:FishUSA
2019/08/07 全球购物
新加坡一家在线男士皮具品牌:Faire Leather Co.
2019/12/01 全球购物
幼儿园区域活动总结
2014/05/08 职场文书
工厂门卫的岗位职责
2014/07/27 职场文书
大学生学期个人总结
2015/02/12 职场文书
党员年终个人总结
2015/02/14 职场文书
2019年农民幸福观调查的实践感悟
2019/12/19 职场文书
详解Spring事件发布与监听机制
2021/06/30 Java/Android
Python如何加载模型并查看网络
2022/07/15 Python