详解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解析html开发库pyquery使用方法
Feb 07 Python
Python根据区号生成手机号码的方法
Jul 08 Python
Python抓取手机号归属地信息示例代码
Nov 28 Python
python读取文件名称生成list的方法
Apr 27 Python
python中实现字符串翻转的方法
Jul 11 Python
Python logging设置和logger解析
Aug 28 Python
Python制作词云图代码实例
Sep 09 Python
Python中的四种交换数值的方法解析
Nov 18 Python
python实现从尾到头打印单链表操作示例
Feb 22 Python
Python3实现个位数字和十位数字对调, 其乘积不变
May 03 Python
解决Pymongo insert时会自动添加_id的问题
Dec 05 Python
基于Pygame实现简单的贪吃蛇游戏
Dec 06 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
解析Extjs与php数据交互(增删查改)
2013/06/25 PHP
通过dbi使用perl连接mysql数据库的方法
2014/04/16 PHP
PHP限制HTML内容中图片必须是本站的方法
2015/06/16 PHP
smarty高级特性之对象的使用方法
2015/12/25 PHP
thinkPHP中分页用法实例分析
2015/12/26 PHP
PHP编程获取图片的主色调的方法【基于Imagick扩展】
2017/08/02 PHP
JS 建立对象的方法
2007/04/21 Javascript
javascript当onmousedown、onmouseup、onclick同时应用于同一个标签节点Element
2010/01/05 Javascript
jQuery MD5加密实现代码
2010/03/15 Javascript
Javasipt:操作radio标签详解
2013/12/30 Javascript
js文件Cookie存取值示例代码
2014/02/20 Javascript
JQuery控制Radio选中方法分析
2015/05/29 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
浅谈Vue 初始化性能优化
2017/08/31 Javascript
Vue使用zTree插件封装树组件操作示例
2019/04/25 Javascript
解决layui下拉框监听问题(监听不到值的变化)
2019/09/28 Javascript
Vue 实现把表单form数据 转化成json格式的数据
2019/10/29 Javascript
[03:04]DOTA2超级联赛专访ZSMJ “莫名其妙”的逆袭
2013/05/23 DOTA
[00:35]2016完美“圣”典风云人物:冷冷宣传片
2016/12/08 DOTA
python访问sqlserver示例
2014/02/10 Python
Pycharm配置远程调试的方法步骤
2018/12/17 Python
在PyTorch中Tensor的查找和筛选例子
2019/08/18 Python
python opencv 实现读取、显示、写入图像的方法
2020/06/08 Python
Python datetime 如何处理时区信息
2020/09/02 Python
台湾饭店和机票预订网站:Expedia台湾
2016/08/05 全球购物
英国皇家造币厂:The Royal Mint
2018/10/05 全球购物
高三自我鉴定
2013/10/23 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
喝酒检查书范文
2014/02/23 职场文书
小学生评语集锦
2014/04/18 职场文书
自强之星事迹材料
2014/05/12 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
外出听课学习心得体会
2016/01/15 职场文书
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript
Go语言特点及基本数据类型使用详解
2022/03/21 Golang
nginx设置资源请求目录的方式详解
2022/05/30 Servers