详解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实现图片批量剪切示例
Mar 25 Python
Python函数式编程指南(一):函数式编程概述
Jun 24 Python
Python中return语句用法实例分析
Aug 04 Python
pycharm重置设置,恢复默认设置的方法
Oct 22 Python
Python基于百度云文字识别API
Dec 13 Python
Django Rest framework之权限的实现示例
Dec 17 Python
Python命名空间的本质和加载顺序
Dec 17 Python
Python3.0中普通方法、类方法和静态方法的比较
May 03 Python
python flask搭建web应用教程
Nov 19 Python
python GUI库图形界面开发之PyQt5状态栏控件QStatusBar详细使用方法实例
Feb 28 Python
Python生成器next方法和send方法区别详解
May 30 Python
Keras-多输入多输出实例(多任务)
Jun 22 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中filter函数校验数据的方法详解
2015/07/31 PHP
PHP错误提示It is not safe to rely on the system……的解决方法
2019/03/25 PHP
AutoSave/自动存储功能实现
2007/03/24 Javascript
jquery获取子节点和父节点的示例代码
2013/09/10 Javascript
浅析return false的正确使用
2013/11/04 Javascript
jQuery函数map()和each()介绍及异同点分析
2014/11/08 Javascript
JS验证邮件地址格式方法小结
2015/12/01 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
js实现各种复制到剪贴板的方法(分享)
2016/10/27 Javascript
JavaScript对象封装的简单实现方法(3种方法)
2017/01/03 Javascript
快速实现jQuery多级菜单效果
2017/02/01 Javascript
微信小程序ajax实现请求服务器数据及模版遍历数据功能示例
2017/12/15 Javascript
vue项目中导入swiper插件的方法
2018/01/30 Javascript
用Fundebug插件记录网络请求异常的方法
2019/02/21 Javascript
Vue响应式原理Observer、Dep、Watcher理解
2019/06/06 Javascript
layui select 禁止点击的实现方法
2019/09/05 Javascript
JavaScript实现捕获鼠标坐标
2020/04/12 Javascript
Python 变量类型详解
2018/10/10 Python
Python类中self参数用法详解
2020/02/13 Python
捷克购买家具网站:JENA nábytek
2020/03/19 全球购物
物流专业大学生求职信范文
2013/10/28 职场文书
自立自强的名人事例
2014/02/10 职场文书
企业文化建设实施方案
2014/03/22 职场文书
老人祝寿主持词
2014/03/28 职场文书
村长贪污检举信
2014/04/04 职场文书
反腐倡廉警示教育活动总结
2014/05/05 职场文书
文明市民先进事迹
2014/05/15 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
环卫工作汇报材料
2014/10/28 职场文书
2015年审计人员工作总结
2015/05/26 职场文书
《我和小伙伴》教学反思
2016/02/20 职场文书
php随机生成验证码,php随机生成数字,php随机生成数字加字母!
2021/04/01 PHP
JVM入门之类加载与字节码技术(类加载与类的加载器)
2021/06/15 Java/Android
分享7个 Python 实战项目练习
2022/03/03 Python
React四级菜单的实现
2022/04/08 Javascript