在计算机视觉领域,图片矫正是一项非常重要的技术,特别是在处理因拍摄角度问题导致的图像失真时。
实验原理
图片矫正主要依赖于透视变换(Perspective Transformation)。透视变换是一种几何变换,可以将图像中的一个四边形区域映射到另一个四边形区域。这在处理如拍摄角度不正导致的图像扭曲时非常有用。
透视变换矩阵
透视变换的核心是找到一个变换矩阵,这个矩阵可以将原图像中的点映射到目标图像中的点。OpenCV 提供了 cv2.getPerspectiveTransform
函数来计算这个变换矩阵。我们需要指定原图像中的四个点和目标图像中的四个点,这八个点将用于计算变换矩阵。
变换应用
一旦我们有了变换矩阵,就可以使用 cv2.warpPerspective
函数将原图像变换为目标图像。这个函数会应用透视变换矩阵,生成校正后的图像。
实验代码
下面是使用 OpenCV 进行图片矫正的完整代码:
import cv2
import numpy as np# 1、读取一张图片
img = cv2.imread("./youhua.png")# 2、获取透视变换矩阵
# 原图中的四个点(按顺时针或逆时针顺序选择四个顶点)
points1 = np.array([[175, 143], [642, 35], [88, 494], [659, 553]],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]))# 显示原图和矫正后的图像
cv2.imshow('Original Image', img)
cv2.imshow('Corrected Image', img_warp)
cv2.waitKey(0)
cv2.destroyAllWindows()
实验现象
-
原图显示:首先,代码读取并显示原始图像,这张图像可能因为拍摄角度问题而显得扭曲。
-
矫正后图像显示:应用透视变换后,图像中的扭曲部分被矫正,图像看起来更加正视。
注意事项
- 点的选择:选择原图像中的四个点时,需要确保这些点能够构成一个四边形,并且这个四边形的大致形状应该与目标图像中的四边形相匹配。
- 图像尺寸:在进行透视变换时,目标图像的尺寸需要与原图保持一致,否则可能会导致图像被拉伸或压缩。