您的位置:首页 > 脚本大全 > > 正文

python图像变换教程(详解python-图像处理映射变换)

更多 时间:2021-10-27 10:07:45 类别:脚本大全 浏览量:2193

python图像变换教程

详解python-图像处理映射变换

做计算机视觉方向,除了流行的各种深度学习算法,很多时候也要会基础的图像处理方法。

记录下opencv的一些操作(图像映射变换),日后可以方便使用

先上一张效果图

python图像变换教程(详解python-图像处理映射变换)

图二和图三是同一种方法,只是变换矩阵不同,都是3点映射变换

图四使用的是4点映射变换

简单介绍下原理

图像都知道是3维(通道)的矩阵,前两维就是由1字节(0-255)数字填充的二维数组。数字大小代表颜色的深浅。

我们把变换前的原图作为x和y。变换后的图为u和v。将[x,y,1]乘上变换矩阵就可以得到对应的新的u和v。不同的变换矩阵有不同的作用(不同的变换方式)

python图像变换教程(详解python-图像处理映射变换)

所以现在就是求不同变换对应的不同的变换矩阵的过程

求这个矩阵 在opencv中直接就有方法

只需提供原图的三个点和你要变换之后的三个点的映射位置(3个原图点,3个映射点)就可以求出这个变换矩阵

python图像变换教程(详解python-图像处理映射变换) python图像变换教程(详解python-图像处理映射变换)

当然了 你会发现不管怎么调整映射点 都不能任意变换

因为只给三个点时 变换之后的图其实只是原图的等比缩放,并不能做到随意映射的效果

这里opencv也提供了 四个点和四个映射的方法 求出对应的变换矩阵 ,最终得到任意映射的效果

python图像变换教程(详解python-图像处理映射变换)

代码如下:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • # 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" alt="python图像变换教程(详解python-图像处理映射变换)" border="0" />)
  • 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-图像处理(映射变换)详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对开心学习网网站的支持!

    原文链接:https://www.cnblogs.com/bob-jianfeng/p/10574401.html

    您可能感兴趣