函数:
cv2.getPerspectiveTransform() 、
cv2.warpPerspective()
说明:图形的透视变换,简单来说就是将一个面投影到另一个面,有点类似拉伸。可将梯形变成正方形。
简单例子:
代码如下:
<code>import cv2
import numpy as np
from matplotlib import pyplot as plt
#打开图片1
img = cv2.imread('2.png')
#生成图片A、B、C、D四个点坐标矩阵
pts1 = np.float32([[41,48],[20,280],[273,46],[284,285]])
#目标矩阵
pts2 = np.float32([[0,0],[0,300],[300,0],[300,300]])
#获取矩阵M
M = cv2.getPerspectiveTransform(pts1,pts2)
#透视变换
dst = cv2.warpPerspective(img,M,(300,300))
#利用工作窗口展示结果
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()/<code>
效果如下:
打开的图片如下:
图中正方形歪了,我们通过代码把它拉正,结果如下:
详解:
为了将图片ABCD四个点移到右边的形状,我们要先获得四个点坐标,
通过win自带画图工具可以看到左下角的坐标,从而获得四个点坐标
创建矩阵代表这4个点位置,如下:
pts1 = np.float32([[41,48],[20,280],[273,46],[284,285]])
同理,要变成的新图片4个点位置,则为边长=300像素的正方形,矩阵如下:
pts2 = np.float32([[0,0],[0,300],[300,0],[300,300]])
cv2.warpPerspective(img,M,(300,300))
上一篇文章说了,这个函数可以对图片进行变换,但是要知道变换矩阵M,此时可以用
cv2.getPerspectiveTransform(pts1,pts2) 来获得
cv2.getPerspectiveTransform(pts1,pts2)
pts1:变换前4个点坐标
pts2:变换后4个点坐标
plt.subplot(121),plt.imshow(img),plt.title('Input')
plt.subplot(122),plt.imshow(dst),plt.title('Output')
plt.show()
这组代码是要用python自带的库,导入如下:from matplotlib import pyplot as plt
图片展示的位置是在工作栏那里
其中121,是指 1行2列,第1个图,是img
122, 1行2列,第2个图,是dst
所以显示是 AB
如果改成211和212,则显示出来结果:
A
B
如果喜欢我的文章,点个赞支持一下,谢谢~
閱讀更多 python的圖像處理 的文章