详解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通过pil为png图片填充上背景颜色的方法
Mar 17 Python
Python爬虫代理IP池实现方法
Jan 05 Python
Python实现PS滤镜的万花筒效果示例
Jan 23 Python
tensorflow构建BP神经网络的方法
Mar 12 Python
python 获取当天凌晨零点的时间戳方法
May 22 Python
Python3.6中Twisted模块安装的问题与解决
Apr 15 Python
pyinstaller参数介绍以及总结详解
Jul 12 Python
python多进程下实现日志记录按时间分割
Jul 22 Python
详解python中的生成器、迭代器、闭包、装饰器
Aug 22 Python
Python 单例设计模式用法实例分析
Sep 23 Python
Python PyInstaller安装和使用教程详解
Jan 08 Python
Python Selenium 设置元素等待的三种方式
Mar 18 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
Server.HTMLEncode让代码在页面里显示为源代码
2013/12/08 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
用javascript判断IE版本号简单实用且向后兼容
2013/09/11 Javascript
jQuery阻止事件冒泡具体实现
2013/10/11 Javascript
Javascript浅谈之this
2013/12/17 Javascript
nodejs之请求路由概述
2014/07/05 NodeJs
使用js获取图片原始尺寸
2014/12/03 Javascript
js显示文本框提示文字的方法
2015/05/07 Javascript
Bootstrap每天必学之面板
2015/11/30 Javascript
基于Node.js的强大爬虫 能直接发布抓取的文章哦
2016/01/10 Javascript
基于JQuery打造无缝滚动新闻步骤详解
2016/03/31 Javascript
浅谈JavaScript函数的四种存在形态
2016/06/08 Javascript
Node.js与Sails redis组件的使用教程
2017/02/14 Javascript
原生JS+HTML5实现跟随鼠标一起流动的粒子动画效果
2018/05/03 Javascript
使用vuex缓存数据并优化自己的vuex-cache
2018/05/30 Javascript
layui实现table加载的示例代码
2018/08/14 Javascript
Electron中实现大文件上传和断点续传功能
2018/10/28 Javascript
express express-session的使用小结
2018/12/12 Javascript
layui使用表格渲染获取行数据的例子
2019/09/13 Javascript
微信小程序基于movable-view实现滑动删除效果
2020/01/08 Javascript
ES6 Generator基本使用方法示例
2020/06/06 Javascript
JavaScript 声明私有变量的两种方式
2021/02/05 Javascript
JavaScript WeakMap使用详解
2021/02/05 Javascript
玩转python爬虫之cookie使用方法
2016/02/17 Python
Python松散正则表达式用法分析
2016/04/29 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
英国优质鞋类专家:Robinson’s Shoes
2017/12/08 全球购物
计算机应用毕业生自荐信
2013/10/23 职场文书
策划主管的工作职责
2013/11/24 职场文书
小学生暑假家长评语
2014/04/17 职场文书
保护黄河倡议书
2014/05/16 职场文书
干部鉴定材料
2014/05/18 职场文书
南湾猴岛导游词
2015/02/09 职场文书
公司年会开场白
2015/06/01 职场文书
python爬虫框架feapde的使用简介
2021/04/20 Python
Java实现HTML转为Word的示例代码
2022/06/28 Java/Android