我在屏幕上显示了一张图像,该图像通过 cvInitUndistortMap 和 cvRemap(已完成相机校准)未失真,用户单击图像中的一个特征。所以我有特征的 (u,v) 像素坐标,还有本征矩阵和畸变矩阵。
我正在寻找的是相机/真实世界坐标中的 3D 线方程,用户点击的要素必须位于该坐标上。我已经知道相机的图像平面与特征之间的垂直距离,因此我可以将其与上述方程结合,得到特征在空间中的 (X,Y,Z) 坐标。
听起来很简单(逆固有矩阵之类的?)但我无法在任何地方找到分步说明。首选 C++ 或 C# 代码。
最佳答案
这是一个有点老的问题,但对某些人来说仍然有用。 所有的线都经过点 (0,0,0),所以:
line.x0 = 0; 线.y0 = 0; line.z0 = 0;
方向 vector 如下: line.A = (u/fx) - (cx/fx); line.B = (v/fy) - (cy/fy); 行.C = 1;
cx,cy,fx,fy 是相机矩阵的参数。 《学习 OpenCv》一书中解释了方程。
关于c# - 像素坐标到 3D 线(opencv),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3107771/