可能会有答案,但是我根本不明白我发现了什么。也许是语言障碍。所以我决定最后问。我需要的是从两个摄像机录制的两个视频中找到3D坐标。设置是这样的:
我似乎无法掌握如何执行此操作。我有的是
现在怎么办? OpenCV文档包含以下公式:
我不知道什么是“s”,也不知道[R | T]矩阵的外部参数。我不知道主要点在哪里以及如何找到它(cx,cy),我只能假设将其设置为0不会造成灾难性的后果。同样,这看起来仅使用2D图像之一,而不是全部使用2D图像。
我知道
calibrateCamera
,solvePnP
。和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
是相机原点从世界/选定坐标系原点的翻译。 cx
和cy
是图像中的主要点-Z轴相交的像平面中以像素为单位的点。通常假定它为图像的中心。 关于c++ - OpenCV-来自两个垂直2D图像的3D现实世界坐标,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31242195/