三维计算机图形学中另外一种重要的变换是透视投影。与平行投影沿着平行线将物体投影到图像平面上不同,透视投影按照从投影中心这一点发出的直线将物体投影到图像平面。这就意味着距离投影中心越远投影越小,距离越近投影越大。
最简单的透视投影将投影中心作为坐标原点,z = 1 作为图像平面,这样投影变换为 ; ,用齐次坐标表示为:
(这个乘法的计算结果是 = 。)
在进行乘法计算之后,通常齐次元素 wc 并不为 1,所以为了映射回真实平面需要进行齐次除法,即每个元素都除以 wc:
更加复杂的透视投影可以是与旋转、缩放、平移、切变等组合在一起对图像进行变换。
在python中调用opencv,用下面函数完成透视投影
transform_matrix=cv2.getPerspectiveTransform(src,dst) print transform_matrix #透射变换完成变形 newimg=cv2.warpPerspective(img,transform_matrix,(w,h)) cv2.imshow(‘preview‘,newimg) cv2.waitKey() cv2.destroyAllWindows()
对图像进行透视变换
void cvWarpPerspective( const CvArr* src, CvArr* dst, const CvMat* map_matrix, int flags=CV_INTER_LINEAR+CV_WARP_FILL_OUTLIERS, CvScalar fillval=cvScalarAll(0) );
Parameters: |
|
---|
The function warpPerspective transforms the source image using the specified matrix:
由四边形的4个点计算透射变换
CvMat* cvGetPerspectiveTransform( const CvPoint2D32f* src, const CvPoint2D32f* dst, CvMat* map_matrix ); #define cvWarpPerspectiveQMatrix cvGetPerspectiveTransform
函数cvGetPerspectiveTransform计算满足以下关系的透射变换矩阵:
这里,dst(i) = (x‘i,y‘i),src(i) = (xi,yi),i = 0..3.
数学之路-python计算实战(10)-机器视觉-透视投影,布布扣,bubuko.com
原文:http://blog.csdn.net/myhaspl/article/details/37730183