美文网首页OpenCV
透视变换之变换为鸟瞰图

透视变换之变换为鸟瞰图

作者: SIENTIST | 来源:发表于2018-09-01 18:20 被阅读0次

    仿射变换:能够将平行四边形变换为另一个平行四边形
    透视变换:能够将平行四边形变换为梯形。
    仿射变换是透视变换的子集。

    先说仿射变换:
    仿射变换的数学表达式为



    要求出该变换矩阵,需要六个独立的方程,即需要3组不共线的点才能求解。

    ——————————————————————
    再说透视变换:
    透视变换(Perspective Transformation)是将成像投影到一个新的视平面(Viewing Plane),也称作投影映射(Projective Mapping)。

    透视变换的通用公式为:



    其中的变换矩阵各部分负责:


    透视变换的数学表达式为:

    所以,给定透视变换对应的四对像素点坐标,即原图的坐标和变换后的坐标,联立公式可求得透视变换矩阵;
    反之,给定透视变换矩阵,即可对图像或像素点坐标完成透视变换。

    图像进行透视变换的2个重要函数:

    Mat getPerspectiveTransform(const Point2f src[], const Point2f dst[])
    
    src[]为原图的四个坐标点,dst[]为变换后图像上对应的四个坐标点
    函数返回值即为透视变换的矩阵
    
    void perspectiveTransform(InputArray src, OutputArray dst, InputArray m)
    src为输入的图片, dst为透视变换后的图片, 
    m为变换矩阵,就是用上面的getPerspectiveTransform计算出来的
    

    这是我做的鸟瞰图变换:


    原图
    透视变换后

    可以看到,效果还是不错的。只是远的地方就有些变形了

    把近处图像的放大了看,鸟瞰图变换的效果是可以的

    图片.png

    锥桶太碍事了,拿一个没有锥桶的图变换看看:
    (我在图上人为画了些直线,以获得更好的观测效果)


    原图 透视变换后

    把近处图像放大,鸟瞰图变换还是不错的

    放大近处的图像

    相关文章

      网友评论

        本文标题:透视变换之变换为鸟瞰图

        本文链接:https://www.haomeiwen.com/subject/tiluwftx.html