一、图像透视变化
1.1 实验原理
图像透视变换(Perspective Transformation)是一种通过数学方法将图像中的点集映射到一个新的点集上的技术。它能够对图像进行几何变换,常用于将不规则形状的区域转换为规则形状,或修正图像中的透视失真。
透视变换的核心在于透视矩阵的计算。通过一组源图像中的四个点(通常是矩形的四个角)和目标图像中的四个点,我们可以得到一个透视变换矩阵,然后应用该矩阵到原始图像中,从而得到变换后的图像。
- 四点透视变换:首先从原始图像中选取四个点,这些点应该位于待变换区域的四个角落。然后定义目标图像的四个角,通常目标图像是一个矩形。
- 透视变换矩阵计算:使用 OpenCV 的
cv2.getPerspectiveTransform()
函数来计算源点与目标点之间的映射关系,并生成一个透视变换矩阵。 - 应用透视变换:通过
cv2.warpPerspective()
函数将透视变换矩阵应用到原图像中,从而得到变换后的图像。
1.2 实验代码
# 导入OpenCV库和numpy库
import cv2
import numpy as np
# 从指定路径读取图像
img = cv2.imread('./youhua.png')
# 定义原始图像中的四个点(通常是矩形顶点),这些点用于定义要进行透视变换的区域
# 这些点的坐标需要根据你的图像中的实际位置进行调整
points1 = np.float32([[175,142],[621,35],[89,491],[652,546]])
# 定义变换后的目标图像中的四个点,这里创建了一个新的矩形,其顶点位于
# 原始图像的最左、最上、最右、最下边界上,从而进行透视变换
# 这一步的目的是将原始图像中的不规则四边形区域变换为一个规则的矩形
points2 = np.float32([[min(points1[:,0]),min(points1[:,1])], # 左上角
[max(points1[:,0]),min(points1[:,1])], # 右上角
[min(points1[:,0]),max(points1[:,1])], # 左下角
[max(points1[:,0]),max(points1[:,1])] # 右下角
])
# 使用cv2.getPerspectiveTransform函数计算透视变换矩阵M
# 这个矩阵用于将points1中的点映射到points2中的点
M = cv2.getPerspectiveTransform(points1,points2)
# 使用cv2.warpPerspective函数应用透视变换矩阵M到原始图像img上
# 第三个参数是输出图像的尺寸,这里设置为原始图像的尺寸
img_output = cv2.warpPerspective(img,M,(img.shape[1],img.shape[0]))
# 显示原始图像和变换后的图像
cv2.imshow('img',img)
cv2.imshow('img_output',img_output)
# 等待用户按键操作,按任意键后关闭所有窗口
cv2.waitKey(0)