cv2.getPerspectiveTransform
和
cv2.warpPerspective
是 OpenCV 库中用于执行透视变换的两个关键函数。下面是对这两个函数的详细解释:
cv2.getPerspectiveTransform
功能:计算从源图像到目标图像的透视变换矩阵。
参数:
src
:源图像中的四个点的坐标,通常是一个形状为(4, 2)
的 NumPy 数组,其中每行代表一个点的(x, y)
坐标。dst
:目标图像中的四个对应点的坐标,格式与src
相同。
返回值:返回一个形状为 (3, 3)
的透视变换矩阵 M
。
使用:
import cv2
import numpy as np
# 源图像中的四个点(通常选择图像的四个角)
src_points = np.array([[x1, y1], [x2, y2], [x3, y3], [x4, y4]], dtype="float32")
# 目标图像中的四个对应点(定义变换后的图像形状)
dst_points = np.array([[X1, Y1], [X2, Y2], [X3, Y3], [X4, Y4]], dtype="float32")
# 计算透视变换矩阵
M = cv2.getPerspectiveTransform(src_points, dst_points)
cv2.warpPerspective
功能:应用透视变换矩阵将源图像变换到目标图像。
参数:
src
:源图像。M
:由cv2.getPerspectiveTransform
计算得到的透视变换矩阵。dsize
:输出图像的尺寸(width, height)
。
可选参数:
flags
和borderMode
:用于指定插值方法和边界像素的外推方法,但通常使用默认值即可。borderValue
:边界颜色值,当borderMode
不为cv2.BORDER_CONSTANT
时可以忽略。
返回值:返回变换后的图像。
使用:
# 输出图像的尺寸
dsize = (width, height)
# 应用透视变换
warped_image = cv2.warpPerspective(src, M, dsize)
注意事项
- 在选择源图像和目标图像中的四个点时,请确保它们是图像中的显著特征点,并且它们在源图像和目标图像中的相对位置保持一致。
- 透视变换可能会改变图像的宽高比和形状,因此需要根据实际需求调整输出图像的尺寸。
- 透视变换是一种非线性变换,可能会引入一些失真或扭曲效果。如果希望保持图像的某些特征不变(如直线保持直线),可能需要考虑其他类型的变换(如仿射变换)。
通过结合使用 cv2.getPerspectiveTransform
和 cv2.warpPerspective
,可以实现图像的透视校正、形状变换等效果,在图像处理和计算机视觉领域具有广泛的应用。