时间:2021-05-22
做计算机视觉方向,除了流行的各种深度学习算法,很多时候也要会基础的图像处理方法。
记录下opencv的一些操作(图像映射变换),日后可以方便使用
先上一张效果图
图二和图三是同一种方法,只是变换矩阵不同,都是3点映射变换
图四使用的是4点映射变换
简单介绍下原理
图像都知道是3维(通道)的矩阵,前两维就是由1字节(0-255)数字填充的二维数组。数字大小代表颜色的深浅。
我们把变换前的原图作为x和y。变换后的图为u和v。将[x,y,1]乘上变换矩阵就可以得到对应的新的u和v。不同的变换矩阵有不同的作用(不同的变换方式)
所以现在就是求不同变换对应的不同的变换矩阵的过程
求这个矩阵 在opencv中直接就有方法
只需提供原图的三个点和你要变换之后的三个点的映射位置(3个原图点,3个映射点)就可以求出这个变换矩阵
当然了 你会发现不管怎么调整映射点 都不能任意变换
因为只给三个点时 变换之后的图其实只是原图的等比缩放,并不能做到随意映射的效果
这里opencv也提供了 四个点和四个映射的方法 求出对应的变换矩阵 ,最终得到任意映射的效果
代码如下:
# coding=gbkimport cv2import numpy as npimport matplotlib.pyplot as pltplt.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.shapepts1 = 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-图像处理(映射变换)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了Python图像处理之图像的缩放、旋转与翻转实现方法。分享给大家供大家参考,具体如下:图像的几何变换,如缩放、旋转和翻转等,在图像处理中扮演着重要
图像处理图像变换就是找到一个函数,把原始图像矩阵经过函数处理后,转换为目标图像矩阵. 可以分为两种方式,即像素级别的变换和区域级别的变换Pointoperat
本文实例讲述了python图像处理之镜像实现方法。分享给大家供大家参考。具体分析如下:图像的镜像变化不改变图像的形状。图像的镜像变换分为三种:水平镜像、垂直镜像
Python命令启动Web服务器实例详解利用Python自带的包可以建立简单的web服务器。在DOS里cd到准备做服务器根目录的路径下,输入命令:python-
标准霍夫变换本质上是把图像映射到它的参数空间上,它需要计算所有的M个边缘点,这样它的运算量和所需内存空间都会很大。如果在输入图像中只是处理m(mtype)==C