python前视图转换为俯视图

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python前视图转换为俯视图相关的知识,希望对你有一定的参考价值。

想要把前视图转化为鸟瞰图,有两种做法

1.在没有标定的情况下,只能选取四个点对了

在有标定的情况下,可以直接使用标定的参数

这里主要介绍1

1.没有标定的情况下,主要用到了两个函数

M = cv2.getPerspectiveTransform(src, dst)

warped = cv2.warpPerspective(img, M, (img.shape[1], img.shape[0] + 1080))

cv2.getPerspectiveTransform 从四个点对中计算透视变换,返回值为3*3的透视变换矩阵

cv2.warpPerspective 计算透视变换后的图像

这里自己遇到的坑是,在计算透视变换矩阵的时候,怎么获取那四个点对,翻了很多blog,都没搞清,最后认认真真的找了一个认认真真的阅读之后,总算摸到门道了,有了一种融会贯通的感觉。

现在的目标是将图像由前视图转化为鸟瞰图,根据先验知识,在鸟瞰图下,长方形物体显示出来肯定是长方形,因此,我们只要在前视图中找到一个正方形的物体,并指定他在俯视图中的坐标就可以了,这里有个但是,由于先验信息里面只有矩形这个信息,具体的长宽比什么的,以及实际的大小未知,所以转化到鸟瞰图下并不能反应物体的真实长度。

这里怎么定义转化后的坐标要自己把握

790ec7dc8aa1

原图

比如说转化到黄色的坐标(内接矩形),这时候就会内缩,图像出现黑边

790ec7dc8aa1

转化到黄色坐标

如果转化到蓝色的,那么能看到的方位就很小了,只有当前车道了(外接矩形)

790ec7dc8aa1

转化到蓝色坐标

dst的坐标也可以自己写,想要转成多大的图像也可以自己填

比如说根据车道的宽度和虚线的长度,可以大概估算出实际长宽比,一个车道宽度为3.75米 这种城市道路一般虚线是两米,间隔4米(高速一般是69,也就是15米)大概估计一下,高度是12米,也就是说长宽比为12:7,想要显示出4个车道,图像的宽度为1920,折算了一下,目标图像的坐标大概是(这里要注意,图像的坐标是从左上角开始算的)

790ec7dc8aa1

自定义

坐标定义代码:

src = np.float32([(1242,1949),(1961,1949), (2695, 2542), (133, 2542)])

#内接矩形

dst = np.float32([(1242, 1949), (1961, 1949), (1961, 2542), (1242, 2542)])

#外接矩形

dst = np.float32([(132, 1949), (2695, 1949), (2695, 2542), (133, 2542)])

#自定义

dst = np.float32([(480,1560-1080), (1440,1560-1080), (1440,3096-1080), (480,3096-1080)])

2.使用标定参数来转化

这个转化就是真实的了,因为知道相机的内参,还有相机的pitch角以及相机距离地面的高度

matlab里面转的,要标定的参数

可以参考的透视变换
参考技术A 在俯视状态下,全选图形,用建模下的“三维旋转”命令,把这个图形用三维小控件,让原图形沿X轴旋转90度。这时,经旋转后的原图形,就会重合变成一条直线。再用三维视图下的工具,把当前俯视改变为前视。在前视图的状态下,看到的图形就会恢复为以前的样子。 参考技术B 在Python中,可以使用OpenCV的cv2.warpPerspective函数来将前视图转换为俯视图。它需要输入一个3x3的变换矩阵,可以使用cv2.getPerspectiveTransform()函数获取这个变换矩阵。

以上是关于python前视图转换为俯视图的主要内容,如果未能解决你的问题,请参考以下文章

全景图转局部平面视图原理详解

转换前视图未完全加载?

请问ug中如何转换视图

Inkscape svg彩色图转灰度图

网站后端_Python+Flask.0010.FLASK即插视图之自定义视图类及视图修饰?

全景图转小行星视角投影原理详解