透视变换会将图像转换为任意的四边形,其主要特点是:原始图像中的所有直线在转换后的图像中仍然是直线。OpenCV的cv2.warpPerspective()函数用于执行透视变换操作,其基本格式如下。
dst=cv2.warpPerspective(src,M,dsize[,flags[,borderMode[,borderValue]]])
其中,M是大小为3×3的转换矩阵,其他参数含义与cv2.warpAffine()函数中的一致。
OpenCV的cv2.getPerspectiveTransform()函数用于计算透视变换使用的转换矩阵,其基本格式如下。
M=cv2.getPerspectiveTransform(src,dst)
参数说明如下。
src为原图像中4个点的坐标。
dst为原图像中4个点在转换后的目标图像中的对应坐标。
示例代码如下。
图像的透视变换
import cv2
import numpy as np
img=cv2.imread('bee.jpg') #读取图像
cv2.imshow('img',img) #显示图像
height=img.shape[0] #获得图像高度
width=img.shape[1] #获得图像宽度
dsize=(width,height)
src=np.float32([[0,0],[width-10,0],
[0,height-10],[width-1,height-1]]) #取原图像中的4个点
dst=np.float32([[50,50],[width-50,80],[50,height-100],
[width-100,height-10]]) #设置4个点在目标图像中的坐标
m = cv2.getPerspectiveTransform(src, dst) #创建转换矩阵
img2=cv2.warpPerspective(img,m,dsize) #执行转换
cv2.imshow('imgFourPoint',img2) #显示图像
cv2.waitKey(0)