如何在OpenCV Python中应用仿射变换来处理图像?
在仿射变换中,原始图像中的所有平行线在输出图像中仍将被保持平行。要在图像上应用仿射变换,我们需要在输入图像上找到三个点,以及对应的输出图像上的三个点。所以首先,我们定义这些点并将其传递给函数 cv2.getAffineTransform() 。 它将创建一个2×3矩阵,我们将其称为变换矩阵M。
我们可以使用以下 语法 来找到变换矩阵M –
其中 pts1 是输入图像上的三个点的数组,而 pts2 则是输出图像上的对应三个点的数组。变换矩阵 M 是类型为 np.float64 的numpy数组。
我们将 M 作为参数传递给 cv2.warpAffine() 函数。以下是 语法 :
其中,
- img − 要进行仿射变换的图像。
-
M − 上述定义的仿射变换矩阵。
-
(cols,rows) − 仿射变换后图像的宽度和高度。
步骤
要执行图像仿射变换,您可以按照以下步骤操作-
导入所需库。在接下来的所有Python示例中,所需的Python库是 OpenCV 。确保您已经安装了它。
使用 cv2.imread() 函数读取输入图像。传递输入图像的完整路径。
定义 pts1 和 pts2 。我们需要三个来自输入图像的点及其在输出图像中的相应位置。
使用 cv2.getAffineTransform(pts1, pts2) 函数计算仿射变换矩阵 M 。
使用 cv2.warpAffine() 方法转换图像。cols和rows是变换后图像的所需宽度和高度。
显示仿射变换后的图像。
让我们来看一些示例,以清楚地了解如何在图像上应用仿射变换。
输入图像
我们将使用以下图像作为下面示例的输入文件-
示例1
在本程序中,我们将看到如何在输入图像上执行仿射变换。
输出
上述Python程序将产生以下输出窗口 –
例2
在这个Python程序中,我们加载灰度图像,定义两个对应于输入和输出图像的点,获取变换矩阵, 最后使用 warpAffine() 方法在输入图像上执行仿射变换。
输出
在执行时会产生以下输出窗口 −