透视变换会将图像转换为任意四边形,特点:原始图像中的所有直线在转换后的图像中仍是直线。
opencv的cv2.warpPerspective()函数用于执行透视变换
格式:a = cv2.warpPerspective(src,M,dsize[,flags[,borderMode[,borderValue]]])
其中M是大小为3X3的转换矩阵
opencv的cv2.getPerspectiveTransform()函数用于计算透视变换使用的转换矩阵
格式:a = cv2.getPerspectiveTransform(src,dst)
其中src为原图像中4个点的坐标
dst为原图像中4个点在转换后的目标图像中的对应坐标
示例
import cv2
import numpy as np
import cv2 as cv
#(117,176),(339,176),(117,512),(339,511)
im2 = cv.imread('.//lena.jpg')
im1 = cv.imread('.//tupian.jpg')
p1 = np.float32([[117,176],[339,176],[339,511],[117,512]])
p2 = np.float32(
[[0, 0], [im2.shape[1], 0], [im2.shape[1], im2.shape[0]], [0, im2.shape[0]]])
m = cv2.getPerspectiveTransform(p2, p1)
m1 = cv2.warpPerspective(im2, m, (im1.shape[1], im1.shape[0]))
Result = im1+m1
# 显示结果
cv2.imshow('Result', Result)
cv2.waitKey(0)
cv2.destroyAllWindows()
步骤:
1.导包,导入图片
2.确认俩张图片点位(tupian.jpg是广告牌,需要手动设置广告牌空白的四个点位置,想要确定四个点位置可以打开画图工具鼠标放置其中一个点,再看左下角象素)
3.透视
4.俩个图片相加(这里的图片可以直接相加,如果显示相加图片颜色不对,可以看看RGB通道颜色)
5.显示结果