如何使用OpenCV Python在图像上应用透视变换?
在透视变换中,直线在变换后仍保持直线不变。要应用透视变换,我们需要一个3×3透视变换矩阵。我们需要输入图像上的四个点和相应输出图像上的四个点。
我们使用 cv2.getPerspectiveTransform() 方法来找到变换矩阵。它的 语法 如下−
其中,
- pts1 −输入图像上的四个点和
-
pts2 −相应输出图像上的四个点。
透视变换矩阵M是一个numpy数组。我们将M传递给 cv2.warpAffine() 函数作为参数来计算透视变换。它的 语法 为−
其中,
- img −待变换的图像。
-
M −定义在上面的透视变换矩阵。
-
(cols,rows) −变换后图像的宽度和高度。
要在图像上应用透视变换,可以按照以下步骤操作−
步骤
导入所需的库。在以下所有Python示例中,所需的Python库是 OpenCV 。请确保您已经安装了它。
使用 cv2.imread() 函数读取输入图像。传递输入图像的完整路径。
定义 pts1 和 pts2 。pts1是一个数组,在输入图像上有四个点,而pts2是相应输出图像上有四个点的数组。
使用 cv2.getPerspectiveTransform(pts1, pts2) 函数计算透视变换矩阵M。
使用 cv2.warpAffine() 方法转换图像,将透视变换矩阵作为参数传递。cols和rows是变换后图像的所需宽度和高度。
显示转换后的图像。
让我们来看一些示例,以更好地理解如何操作。
我们将使用此图像作为以下示例的 输入文件 。
示例1
在此示例中,我们对输入图像执行透视变换。我们将输出图像的宽度和高度设置为与输入图像相同。
输出结果
执行该Python程序将显示以下输出窗口−
上述输出图像是在输入图像进行透视变换后获得的。
示例2
在此示例中,我们对输入图像进行透视变换。我们将输出图像的宽度和高度设置为(600,350)。其与输入图像的宽度和高度不同。
输出
在执行时,它将生成以下输出窗口 −
左侧的图像是输入图像,右侧的图像是透视变换后的输出图像。