详解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发腾讯微博代码分享
Jan 10 Python
python自然语言编码转换模块codecs介绍
Apr 08 Python
在Python中操作字符串之rstrip()方法的使用
May 19 Python
python实现简单购物商城
May 21 Python
Python数字图像处理之霍夫线变换实现详解
Jan 12 Python
Python读取图片为16进制表示简单代码
Jan 19 Python
Django权限机制实现代码详解
Feb 05 Python
python单线程文件传输的实例(C/S)
Feb 13 Python
解决Pycharm后台indexing导致不能run的问题
Jun 27 Python
Python提取转移文件夹内所有.jpg文件并查看每一帧的方法
Jun 27 Python
python障碍式期权定价公式
Jul 19 Python
python 抓取知乎指定回答下视频的方法
Jul 09 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代码简化
2010/02/08 PHP
PHP中用hash实现的数组
2011/07/17 PHP
php 文件上传类代码
2011/08/06 PHP
PHP JS Ip地址及域名格式检测代码
2013/09/27 PHP
JavaScript 实现类的多种方法实例
2013/05/01 Javascript
iframe里面的元素触发父窗口元素事件的jquery代码
2014/10/19 Javascript
原生javascript实现图片无缝滚动效果
2016/02/12 Javascript
JS+CSS实现的漂亮渐变背景特效代码(6个渐变效果)
2016/03/25 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
手机端点击图片放大特效PhotoSwipe.js插件实现
2016/08/24 Javascript
解决拦截器对ajax请求的拦截实例详解
2016/12/21 Javascript
JavaScript中splice与slice的区别
2017/05/09 Javascript
微信小程序实现打卡日历功能
2020/09/21 Javascript
vue-cli3 DllPlugin 提取公用库的方法
2019/04/24 Javascript
使用JS判断页面是首次被加载还是刷新
2019/05/26 Javascript
JS使用for in有序获取对象数据
2020/05/19 Javascript
Element Dialog对话框的使用示例
2020/07/26 Javascript
[00:53]TI3正赛第三天 DK怒破A队不败金身 现场国旗飘扬热血激昂
2013/08/10 DOTA
python3生成随机数实例
2014/10/20 Python
python相似模块用例
2016/03/04 Python
Python使用MD5加密算法对字符串进行加密操作示例
2018/03/30 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
pandas进行数据的交集与并集方式的数据合并方法
2018/06/27 Python
python中字符串数组逆序排列方法总结
2019/06/23 Python
python+numpy按行求一个二维数组的最大值方法
2019/07/09 Python
Python3 翻转二叉树的实现
2019/09/30 Python
Python基于pyecharts实现关联图绘制
2020/03/27 Python
webView加载html图片遇到的问题解决
2019/10/08 HTML / CSS
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
考博专家推荐信模板
2013/12/02 职场文书
党支部反对四风思想汇报
2014/10/10 职场文书
大学生思想道德自我评价
2015/03/09 职场文书
学习党史心得体会2016
2016/01/23 职场文书
《别在吃苦的年纪选择安逸》读后感3篇
2019/11/30 职场文书
python批量更改目录名/文件名的方法
2021/04/18 Python
MySQL中datetime时间字段的四舍五入操作
2021/10/05 MySQL