详解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 图片验证码代码
Dec 07 Python
闭包在python中的应用之translate和maketrans用法详解
Aug 27 Python
python登陆asp网站页面的实现代码
Jan 14 Python
python使用7z解压apk包的方法
Apr 18 Python
构建Python包的五个简单准则简介
Jun 15 Python
Django渲染Markdown文章目录的方法示例
Jan 02 Python
Falsk 与 Django 过滤器的使用与区别详解
Jun 04 Python
python粘包问题及socket套接字编程详解
Jun 29 Python
python通过txt文件批量安装依赖包的实现步骤
Aug 13 Python
Ubuntu18.04安装 PyCharm并使用 Anaconda 管理的Python环境
Apr 08 Python
Python 忽略文件名编码的方法
Aug 01 Python
python palywright库基本使用
Jan 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+mysql留言本源码
2009/11/11 PHP
一个PHP缓存类代码(附详细说明)
2011/06/09 PHP
PHP与Java进行通信的实现方法
2013/10/21 PHP
php生成数组的使用示例 php全组合算法
2014/01/16 PHP
PHP使用mysql_fetch_object从查询结果中获取对象集的方法
2015/03/18 PHP
php实现的农历算法实例
2015/08/11 PHP
php 删除指定文件夹的实例讲解
2017/07/25 PHP
php反射学习之不用new方法实例化类操作示例
2019/06/14 PHP
javascript 兼容FF的onmouseenter和onmouseleave的代码
2008/07/19 Javascript
JavaScript中获取鼠标位置相关属性总结
2014/10/11 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
第九章之路径分页标签与徽章组件
2016/04/25 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
Angularjs自定义指令Directive详解
2017/05/27 Javascript
详解React之父子组件传递和其它一些要点
2018/06/25 Javascript
swiper在vue项目中loop循环轮播失效的解决方法
2018/09/15 Javascript
微信小程序页面间传值与页面取值操作实例分析
2019/04/30 Javascript
vue+Element实现搜索关键字高亮功能
2019/05/28 Javascript
Vue使用vue-draggable 插件在不同列表之间拖拽功能
2020/03/12 Javascript
jQuery开发仿QQ版音乐播放器
2020/07/10 jQuery
python list使用示例 list中找连续的数字
2014/01/27 Python
python正则中最短匹配实现代码
2018/01/16 Python
python实现黑客字幕雨效果
2018/06/21 Python
Python微信操控itchat的方法
2019/05/31 Python
Python csv文件记录流程代码解析
2020/07/16 Python
python对输出的奇数偶数排序实例代码
2020/12/04 Python
纯CSS3实现手风琴风格菜单具体步骤
2013/05/06 HTML / CSS
HTML5自定义视频播放器源码
2020/01/06 HTML / CSS
如何向接受结构参数的函数传入常数值
2016/02/17 面试题
大学生村官事迹材料
2014/01/21 职场文书
初中生自我评价
2014/02/01 职场文书
计算机数据库专业职业生涯规划书
2014/02/08 职场文书
2014年底工作总结
2014/12/15 职场文书
高一英语教学反思
2016/03/03 职场文书
Python实现灰色关联分析与结果可视化的详细代码
2022/03/25 Python