一、实验原理
图片矫正实验的核心是 透视变换(Perspective Transformation)。透视变换是一种几何变换,它根据两个坐标点集之间的映射关系,改变图像的透视效果,用于矫正图像中存在的透视畸变或视角不正的问题。在现实世界中,我们观察到的物体在视觉上会受到透视效果的影响,即远处的物体看起来会比近处的物体小。透视投影是指将三维空间中的物体投影到二维平面上的过程,这个过程会导致物体在图像中出现形变和透视畸变。
1、关键点说明:
①输入点集(points1):
原始图像上选择的四个角点,代表需要变换的区域。
②输出点集(points2):
变换后的目标矩形区域的四个角点。
2、矩阵计算:
利用 cv2.getPerspectiveTransform 函数通过输入点集和输出点集计算透视变换矩阵 M。
3、透视变换:
使用透视变换矩阵 M,通过 cv2.warpPerspective 实现图像矫正。
该过程相当于将原图像的一个倾斜区域调整为正视角的矩形区域。
二、实验代码
以下代码实现了透视变换的基本流程:
import cv2
import numpy as np# 1. 读取一张图片
img = cv2.imread("./card.png")# 2. 获取透视变换矩阵
# 原图中的四个点(需要手动确定需要变换的区域)
points1 = np.array([[200, 100], [700, 150], [140, 400], [650, 460]], dtype=np.float32)
# 目标图中的四个点(变换后的矩形区域)
points2 = np.array([[0, 0], [img.shape[1], 0], [0, img.shape[0]], [img.shape[1], img.shape[0]]], dtype=np.float32)# 计算透视变换矩阵
M = cv2.getPerspectiveTransform(points1, points2)# 3. 透视变换
# 使用变换矩阵对图像进行透视变换
img_warp = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0]))# 4. 显示原图和变换后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Warped Image', img_warp)cv2.waitKey(0)
cv2.destroyAllWindows()
三、实验现象
1、原始图像:
原图中选择了四个点(points1),这些点标定了需要校正的区域,通常可能是倾斜的或变形的视角区域。
2、矫正后的图像:
通过 cv2.warpPerspective 将选择的区域拉伸成一个矩形区域,视觉效果上变得规整、正视。
如果输入点集和输出点集选取正确,矫正后的图像应该完美对齐目标矩形框。
3、实验意义:
该实验是实际应用中图片校正的基础,例如:
①文档扫描:
矫正拍摄的文档图像,使其正视并清晰。
②图像分析:
用于矫正因拍摄角度导致的畸变,便于后续处理。
③目标检测:
在变形场景中提取正确的几何特征。
通过此实验,您将能够掌握图像透视变换的核心技术,并理解其在图像校正领域的实际应用。