【问题标题】:Find 3d perspective on 2d image在 2d 图像上查找 3d 透视图
【发布时间】:2019-10-24 13:52:22
【问题描述】:

我有这样的图像:

我想找到一条与红线垂直的线(我的意思是与轨道垂直的线)。如何使用 OpenCV 和 Python 做到这一点?问题是相机的高度未知,可见的 90 度角不是真正的 90 度角。我找到了here 一个使用 OpenCV .projectPoints() 方法的选项,但看起来它需要知道结果点的位置并在那里传递一些向量。有人可以帮助如何实现这一目标吗?或者这甚至可能吗?

【问题讨论】:

  • 2D 中的线来自 3D 中的平面。您需要知道铁轨距地面的高度,以便通过铁轨有一个平行于地面的平面,该平面将与从相机穿过投影到红线的铁轨的平面相交。不是一个简单的问题。

标签: python python-3.x opencv image-processing


【解决方案1】:

@Chiefir,您没有足够的数据来获得您要求的垂直线。

我相信你最好的机会是在图像中找到一些平行线,就像草丛中的那些标记(就在绿色十一号所在的位置)。

有些方法会自动在图像中寻找平行线,假设世界是一个垂直的直线(如道路和建筑物组成的城市),并获得 3D 姿势。我不认为这些对你的形象有用。

【讨论】:

    【解决方案2】:

    这张图片中的信息很少(实际上几乎没有)来实现您的目标,因此每个解决方案都必然是不精确的。如果这是视频序列的一帧,您可以将下面的方法应用于围绕这一帧的一系列帧,以提高其准确性。

    一种方法是假设

    1. 导轨离地面的高度很小(与它们与摄像机的距离相比)。
    2. “11”号在草丛中的长边垂直于红线。

    然后您可以估计“11”的vanishing point V。然后,从 V 到红线的一点绘制的任何线,通过构造,都是与红线所代表的线正交的地平面上的线的图像。

    您可以通过使用(可能是)手绘红线而不是使用连接轨道支撑的底部点的线来稍微提高准确性,因为这真的是在地面上。

    如果支撑栏杆的杆是垂直的(它们不是垂直的,如图中另一条轨道支撑的杆所证明的那样),您可以计算 它们的消失点 P,然后使用代替上述方法中的V。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-09-17
      • 2020-09-30
      • 1970-01-01
      • 2013-07-19
      • 2013-11-09
      • 1970-01-01
      • 2011-02-12
      相关资源
      最近更新 更多