实验原理
- 找到原图 和目标图的四个点,获取透视变换矩阵
- 对图像应用透视变换,实现油画区域的矫正
实验过程
import cv2
import numpy as np
# 读取图片文件
img = cv2.imread('./g.png')
# 定义源图像中的四个角点
points1 = np.float32([
[174,143],
[623,37],
[90,492],
[656,550]
])
# 根据源图像角点的最小和最大坐标值,定义目标图像中的四个角点
# 这样做是为了将源图像的角点区域变换到目标图像的对应位置
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])]
])
# 计算透视变换矩阵
M = cv2.getPerspectiveTransform(points1, points2)
# 应用透视变换到图像上
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)
cv2.waitKey(0)
实验结果