关于C ++:使用warpPerspective()opencv生成道路的俯视图

generate a top-dow view of a road using warpPerspective() opencv

我正在尝试实施反透视贴图,以计算到道路上另一辆车的距离。 我知道在应用函数warpPerspective()之前需要生成带有源点和目标点的转换矩阵,但是我不知道如何计算目标点。

我在这个论坛和其他网站上进行了搜索,但无法将第一张图片转换为第二张图片:

Image 1
(来源:shanetuohy.com)

Image 2
(来源:shanetuohy.com)


要达到的目标需要您计算地平面,相机在图像中的位置以及鹰视图中的位置之间的单应性。

传统上,这是通过在大多数Computer Vision管道中提取特征(拐角或关键点)来处理的,但这在这里是不切实际的:道路上没有特征(或变化的特征)。

相反,您可以使用以下过程在校准步骤中计算这些单应性:

  • 将相机放在目标车辆上。将已知的矩形图案(通常是棋盘)放在汽车前的平坦地面上。如果需要公制距离,则还需要知道图案的大小,否则将仅测量相对距离。

  • 使用此设置拍摄校准图案的照片。

  • 在图案的图像中,您需要对其进行检测。这可以通过几种方式完成:如果您有图案的参考图像,则可以自动检测到它,或者可以手动单击四个外角。这将为您至少提供四个点对应关系(对于图案的每个外角为1)。在图像点(例如4个角)和参考位置之间建立点对应关系,该参考位置可以是所述点在图案的参考图像中的位置(如果oyu有一个)或为此所需的位置点在鹰视图中。

  • 根据对应关系,估计单应性HH是一个3x3矩阵(请参阅任何计算机视觉参考,在线或教科书)。

  • 这将为您输出摄像机看到的图像与校准图案的参考位置之间的变换。
    如果您在鹰视图中将图案的正面平行视图或其所需坐标作为参考,则您将拥有所要的单应性。如果不是,则需要估计第二个单应性并将其结果链接起来。

    请注意,在Gary Bradski的Learning OpenCV书中考虑了此应用程序。您可以在这本书中阅读更多有关它的内容,并可能在网上找到原始代码。