一、实验原理
基于计算机视觉中的透视变换(Perspective Transformation),也称为单应性(Homography)。透视变换是一种几何变换,用于将图像从一个平面映射到另一个平面,同时保持直线的直线性。这种变换在图像处理中非常有用,尤其是在图像校正、图像拼接、图像增强等领域。
二、实验代码
# 导入OpenCV和NumPy库
import cv2
import numpy as np
# 读取图片文件
img = cv2.imread('./youhua.png')
# 定义四个点,这些点是图片中需要被变换的区域的四个角点
points1 = np.float32([
[174,143], # 左上角点
[623,37], # 右上角点
[90,492], # 左下角点
[656,550] # 右下角点
])
# 计算包围points1的最小外接矩形的四个角点
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])] # 右下角点
])
# 使用getPerspectiveTransform函数计算透视变换矩阵M
M = cv2.getPerspectiveTransform(points1, points2)
# 使用warpPerspective函数对图片进行透视变换
dst = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0]))
# 计算变换后图片的最小外接矩形的坐标
min_x, min_y = points2.min(axis=0).astype(int)
max_x, max_y = points2.max(axis=0).astype(int)
# 根据最小外接矩形的坐标裁剪变换后的图片
cropped_dst = dst[min_y:max_y, min_x:max_x]
# 显示原始图片
cv2.imshow('img', img)
# 显示裁剪后的变换图片
cv2.imshow('cropped_dst', cropped_dst)
# 等待按键,0表示无限等待直到有按键按下
cv2.waitKey(0)