可能会有答案,但是我根本不明白我发现了什么。也许是语言障碍。所以我决定最后问。我需要的是从两个摄像机录制的两个视频中找到3D坐标。设置是这样的:

我似乎无法掌握如何执行此操作。我有的是

  • 两张图片上的像素坐标(相对于图片上的0,0点)
  • 焦距
  • 两个摄像机从0,0,0现实世界点(Ax和By)到
  • 的距离
  • 像素的大小
  • 我知道相机之间的 Angular 是90度

  • 现在怎么办? OpenCV文档包含以下公式:

    我不知道什么是“s”,也不知道[R | T]矩阵的外部参数。我不知道主要点在哪里以及如何找到它(cx,cy),我只能假设将其设置为0不会造成灾难性的后果。同样,这看起来仅使用2D图像之一,而不是全部使用2D图像。

    我知道calibrateCamerasolvePnP。和stereoCalibrate函数,但我不知道如何使用它们。

    我知道当您将相机当作两只“眼睛”时会变得多么复杂,我希望在相机拍摄垂直图像的情况下会更容易。我现在有一个公式来计算3D坐标,但这并不完全精确。错误在1英寸以下,但1英寸太大。
    xa, ya, xb, yb - pixel coordinates from pictures
    focalAB - focal length
    W = -(Ax*xb*pixelSize - focalB*By)/(xa*pixelSize*xb*pixelSize - focalA*focalB)
    X = Ax + W*xa*pixelSize
    Y = W*focalA
    Z = W*xa*pixelSize
    

    错误:

    这些用于制造商提供的焦距和像素大小。 5400um和1,75um。但是,对于4620um和1,69um而言,误差是最小的,其中最大误差是3#X轴,即2.3cm,高度误差几乎消失了(最大0.2cm),其余均为0.1cm。或1-1,5厘米。

    最佳答案

    除了像@YangKui建议的那样告诉您阅读立体视觉之外,我还可以回答您的一些子问题。

    您引用的方程式是(单个摄像机)3D到2D投影方程式。这是一个射影几何方程式(因此将1s作为最后一个坐标),并且所有内容都达到了一定比例s

  • s是此比例因子。
  • R是摄像机相对于世界/选定坐标系的3x3旋转。
  • t是相机原点从世界/选定坐标系原点的翻译。
  • cxcy是图像中的主要点-Z轴相交的像平面中以像素为单位的点。通常假定它为图像的中心。
  • 关于c++ - OpenCV-来自两个垂直2D图像的3D现实世界坐标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31242195/

    10-13 07:03