我已经搜索了很长一段时间,但仍然不知道目的地是如何选择的鸟瞰转换。我的理解是,cv2.getPerspectiveTransform(src, dst)通过将点src从一个图像平面映射到另一个图像平面上的对应点dst来计算单色矩阵(或翘曲矩阵)。以汽车车道前视图转换为鸟瞰视图为例,src一般是感兴趣区域的4个顶点的坐标,但我的问题是如何选择dst给定的src?在下面的情况下,我一直在认真考虑这个问题,请给我任何帮助。
下面是一个具体的示例:文章中的原始代码:
import cv2
import numpy as np
import matplotlib.pyplot as plt
IMAGE_H = 223
IMAGE_W = 1280
src = np.float32([[0, IMAGE_H], [1207, IMAGE_H], [0, 0], [IMAGE_W, 0]])
dst = np.float32([[569, IMAGE_H], [711, IMAGE_H], [0, 0], [IMAGE_W, 0]])
M = cv2.getPerspectiveTransform(src, dst) # The transformation matrix
Minv = cv2.getPerspectiveTransform(dst, src) # Inverse transformation
img = cv2.imread('./test_img.jpg') # Read the test img
img = img[450:(450+IMAGE_H), 0:IMAGE_W] # Apply np slicing for ROI crop
warped_img = cv2.warpPerspective(img, M, (IMAGE_W, IMAGE_H)) # Image warping
plt.imshow(cv2.cvtColor(warped_img, cv2.COLOR_BGR2RGB)) # Show results
plt.show()下面是测试图像:

roi图像:

并输出转换后的鸟瞰图像:

。
真正让我困惑的是,在这个例子中,dst和src是如何选择的?dst = np.float32([[569, IMAGE_H], [711, IMAGE_H], [0, 0], [IMAGE_W, 0]]),尤其是569,711,最初我以为这是在顶部的自我车道标记的x坐标,但事实并非如此。当我改变569,711到x坐标的自我车道标志(592,692)在顶部。下面是比较。您可能会看到,当我在dst中将(569,711)更改为(592,692)时,并行操作变得越来越糟糕。

你能帮我理解一下如何正确选择src和dst吗?
更新:这是scr和dst点可视化,有人能帮助我理解如何选择点吗?我非常想知道。

dst与输出的鸟瞰图完全匹配:

发布于 2021-11-25 04:47:01
你要寻找的是一个使道路上的会合线变得平行的同调。您可以在src上取4点线上的线,并将它们映射到矩形的角。
https://stackoverflow.com/questions/70104865
复制相似问题