M = cv2.getPerspectiveTransform(src, target)
src是四个点的list:
[[121. 13.]
[433. 21.]
[ 58. 250.]
[497. 276.]]
target是要把src变换到以下四个点:
[[ 0. 0.]
[500. 0.]
[ 0. 281.]
[500. 281.]]
M是求出来的投影矩阵,3*3:
[[ 1.71880854e+00 4.56898473e-01 -2.13915514e+02]
[-4.35924710e-02 1.70010637e+00 -1.68266938e+01]
[ 9.94528404e-05 1.75161072e-03 1.00000000e+00]]
result = cv2.warpPerspective(img, M, (0, 0))
cv2.imshow('result', result)
img是原图,result是用M投影变换后得到的图像
points = points.reshape(1, -1, 2).astype(np.float32) # 二维变三维, 整形转float型, 一个都不能少
new_points = cv2.perspectiveTransform(points, M)
new_points = new_points.reshape(-1,2)
points是n个二维点,格式是numpy数组,shape为n*2。
一定要给他多加一维,然后转为float才行。
new_points是变换后的点,一定也要reshape回来。
参考:
大坑:perspectiveTransform
OpenCV Python cv2.perspectiveTransform