由于照相机硬件设备本身的误差,可能会导致镜头畸变,从而导致照相机拍摄到的照片产生失真现象,此时可以通过透视变换去适当的校正。
大概的思路:在原图像上确定四个点,然后再新图像上也确定四个点,通过warpMatrix方法,确定出对应的函数关系,从而将图像进行校正。
import cv2
import numpy as np
img = cv2.imread('beyond.png')
result3 = img.copy()
src = np.float32([[664,423],[1197,1144],[245,785],[709,1307]])
dst = np.float32([[0,0],[883,0],[0,560],[883,560]])
print(img.shape)
m = cv2.getPerspectiveTransform(src,dst)
print("warpMatrix:")
print(m)
'''
warpMatrix:
[[ 5.53592476e-01 6.40760353e-01 -6.38627034e+02]
[-6.16322870e-01 4.55617322e-01 2.16512258e+02]
[ 2.54107793e-04 -3.90561502e-04 1.00000000e+00]]
'''
result = cv2.warpPerspective(result3,m,(883,560))
cv2.imshow("src",img)
cv2.imshow("result",result)
cv2.waitKey(0)
原图:
日历的坐标我是用ps里面的标尺看的,不一定特别精准。 日历四个顶点的位置在图像上的像素坐标为(行x轴,列y轴):[664,423],[1197,1144],[245,785],[709,1307] 日历的长为883像素,高为560像素
运行后结果为:
(原图片太大放不下,截取了一部分)
|