如何为cv2.getPerspectiveTransform鸟瞰图变换选取合适的src与dst坐标
鸟瞰图透视变换src与dst坐标选取规则
核心逻辑
cv2.getPerspectiveTransform(src, dst) 输入的是4组一一对应的共面坐标点,src为前视图中地面上的4个点,dst为你期望这4个点在鸟瞰图中对应的坐标。选取的核心约束是:现实世界地面上的平行直线,在dst坐标中的投影也要保持平行,且比例符合现实几何关系。
案例中569、711数值的来源
你遇到的案例中,点的顺序为 [左下, 右下, 左上, 右上],对应关系如下:
- src前两个点是前视图ROI底部的左右端点,对应现实中自车附近的地面左右边界
- dst前两个点是鸟瞰图底部的车道左右端点
569和711的差值为142像素,这个宽度是预先设定的鸟瞰图比例尺下,标准车道宽度(约3.5米)对应的像素宽度:取输出图像宽度1280的中心640,左右各偏移71像素,刚好得到640-71=569、640+71=711。
你之前误将前视图远处车道线的x坐标填入dst底部的位置,相当于把近处车道宽度映射为远处车道宽度,对应关系完全错位,自然会出现平行性变差的问题。
正确选点步骤
- 第一步:标定src坐标
选取前视图中完全落在地面上的4个点,按固定顺序(比如左下、右下、左上、右上)排列:通常选自车两侧车道线靠近车头的两个点作为左下、右下,选两侧车道线远处的两个点作为左上、右上,四个点构成透视梯形,不能混入非地面的点。 - 第二步:确定鸟瞰图比例尺
按需设定鸟瞰图的像素和现实长度的对应关系,比如设定20像素对应现实1米,3.5米宽的标准车道对应像素宽度为70像素。 - 第三步:标定dst坐标
按和src完全一致的顺序排列坐标:- 左下、右下的y坐标设为输出图像高度(对应鸟瞰图底部,靠近自车的位置),x坐标根据车道宽度和中心位置计算,比如希望车道居中的话,分别为
图像宽度/2 - 车道像素宽度/2、图像宽度/2 + 车道像素宽度/2 - 左上、右上的y坐标设为0(对应鸟瞰图顶部,远处位置),x坐标和左下、右下的x坐标完全一致,保证变换后车道线为平行竖线
- 左下、右下的y坐标设为输出图像高度(对应鸟瞰图底部,靠近自车的位置),x坐标根据车道宽度和中心位置计算,比如希望车道居中的话,分别为
- 第四步:验证调整
若变换后平行性不佳,优先检查src点是否全部落在地面、点的顺序和dst是否一一对应,再调整比例尺匹配现实比例。
内容的提问来源于stack exchange,提问作者Albert G Lieu
相关产品推荐
相关产品推荐

