Opencv-python之图形的透视变换

函数:

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>

效果如下:

打开的图片如下:


Opencv-python之图形的透视变换

图中正方形歪了,我们通过代码把它拉正,结果如下:


Opencv-python之图形的透视变换


详解:


Opencv-python之图形的透视变换


为了将图片ABCD四个点移到右边的形状,我们要先获得四个点坐标,

通过win自带画图工具可以看到左下角的坐标,从而获得四个点坐标


Opencv-python之图形的透视变换


创建矩阵代表这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

如果喜欢我的文章,点个赞支持一下,谢谢~


分享到:


相關文章: