一,实验原理
图像矫正的原理是透视变换
图像畸变主要有两类:径向畸变和切向畸变。径向畸变通常会导致图像的四个角向外或向内弯曲;切向畸变则是由于相机与图像平面不完全平行引起的。而OpenCV 提供了一个相机标定的工具,能够自动估计畸变系数并进行矫正。通过标定过程,我们可以得到一个相机的内参矩阵和畸变系数,进而使用这些信息来矫正畸变图像。
如下图:
将A',B',C',D',进行变换使其变为A,B,C,D这四个点
就比如下面的实验变换:
二,实验代码
import cv2
import numpy as np
# 读取图像文件
img = cv2.imread("6.png")
# 设置变换前后对应的四个点坐标
# 变换前的四个点坐标,这些点通常是原图中需要进行透视变换的四个顶点
points1 = np.array([[223, 118], [680, 176], [139, 380], [654, 451]], 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)
# 使用透视变换矩阵对原图进行透视变换,并生成结果图img_warp
img_warp = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0]))
# 显示原图和结果图
cv2.imshow("img", img)
cv2.imshow('img_warp', img_warp)
# 暂停程序运行,等待用户关闭窗口
cv2.waitKey(0)
三,实验现象
总的来说,就是选择原始图像中的四个点,并将这四个点透视变换到新图像的四个角,从而产生透视变换的效果。