在 OpenCV 中,透视变换(Perspective Transformation)是一种将图像中的一个四边形区域变换到另一个四边形区域的操作。这个操作常用于图像校正、裁剪等场景,比如将拍摄的书籍图片校正成直角的矩形。
透视变换的基本步骤包括以下几步:1. 确定原图像上的四个点(源点),这些点形成一个四边形。2. 确定目标图像上的四个点(目标点),这些点形成一个矩形区域。3. 使用 cv2.getPerspectiveTransform
计算透视变换矩阵。4. 使用 cv2.warpPerspective
应用透视变换。### 示例代码:pythonimport cv2import numpy as np# 读取图像image = cv2.imread('input_image.jpg')# 原图像中要变换的四个点(源点),比如选择一个四边形src_points = np.float32([[100, 150], [400, 150], [100, 450], [400, 450]])# 目标图像上的四个点(目标点),对应变换后的矩形dst_points = np.float32([[0, 0], [300, 0], [0, 400], [300, 400]])# 计算透视变换矩阵M = cv2.getPerspectiveTransform(src_points, dst_points)# 应用透视变换,设置目标图像的宽和高(根据 dst_points 设定)output_image = cv2.warpPerspective(image, M, (300, 400))# 显示原图和透视变换后的图像cv2.imshow("Original Image", image)cv2.imshow("Perspective Transform", output_image)cv2.waitKey(0)cv2.destroyAllWindows()
### 关键函数说明:1. cv2.getPerspectiveTransform(src_points, dst_points)
:生成一个 3x3 的透视变换矩阵,输入是源点和目标点的坐标。 - src_points
是原图像中四个点的坐标(形状为 4x2 的 NumPy 数组)。 - dst_points
是目标图像中对应的四个点的坐标(同样是 4x2 的 NumPy 数组)。 2. cv2.warpPerspective(image, M, (width, height))
:使用透视变换矩阵 M
将原图像变换为目标图像。 - image
是原图像。 - M
是透视变换矩阵。 - (width, height)
是输出图像的尺寸。### 注意事项:- 源点 (src_points
) 应该是原图像中四个可以形成一个四边形的点。- 目标点 (dst_points
) 通常选择为矩形的四个顶点,这样会将原图像中的四边形区域变换为一个矩形区域。这种方法常用于文档矫正、图像变形矫正等任务。
06-17
2486
11-13
1704
09-10
904
09-11
273