opencv - SolvePnP - 如何使用它?

标签 opencv computer-vision

我正在使用运动结构进行多 View 几何重建。到目前为止,我有以下内容

两张图片作为初始输入 相机参数和畸变系数 初始输入图像的工作校正流水线 创建视差图 通过遍历视差图并将值作为 z(x 和 y 是视差图中像素的像素坐标)从视差图中创建点云(不起作用的是 reprojectImageTo3D,因为我的 Q 矩阵似乎非常错了,但其他一切正常) 这为我提供了一个很好的场景点云。

现在我需要向管道添加 n 个图像。我在谷歌上搜索了很多,发现 solvePnP 方法对我有帮助。

但是现在我很迷茫...

SolvePnP 将获取 3D 点列表和相应的 2D 图像点,并为第三个、第四个相机……重建 R 和 T 向量,依此类推。我读到 tho 向量需要对齐,这意味着第一个向量中的第一个 3D 点对应于第二个向量中的第一个 2D 点。

到目前为止一切顺利。但是我从哪里获取这些信件呢?我可以使用这种方法 reprojectPoints 来获取这两个向量吗???或者我的整个想法使用视差图进行深度重建是错误的吗? (备选方案:triangulatePoints 使用之前找到的良好匹配项)。

有人可以帮我弄清楚吗?我如何使用 solvePnP 添加 n 个摄像机并因此向我的点云添加 3D 点并改进重建结果?

最佳答案

Solve PnP 是一个函数,给定对象的 3D 模型(比方说棋盘)和该对象在现实世界中的 View ,将为您提供相机相对于对象的大致位置和方向.

对象的 3D 模型和 View 是一组对应的 3D 和 2D 点。当您知道对象模型(对象关键点的位置)以及这些关键点在相机图像上的位置时,该功能将更好地工作。

我不是 3D 图像重建方面的专家,但似乎使用包含观察到的场景及其关键点的每张图像中的信息,并从 View 中找到图像上的信息,您应该能够迭代地改进您的模型并改进相机位置的近似值。

由于您有视差图,它显示了从两个不同点观察到的场景关键点的距离,如果您知道确切的视点,使用三角测量确实会更好。或者它们的良好近似值(然后您需要用后续的新 View 改进这些近似值)。

关于opencv - SolvePnP - 如何使用它?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23493701/

相关文章:

c++ - InitUndistortRectifyMap 和 Remap

opencv - 可以结合使用HoG和AdaBoost算法进行跟踪吗?

c++ - 模板匹配与模板更新

c++ - minMaxLoc 数据类型

python - 当并非所有角落都可见时执行透视变换python openCV

opencv - 霍夫变换 n OpenCvSharp

python - 如何在opencv中应用三点三角形渐变?

python - 事件形状模型的拟合过程不与统计模型拟合函数收敛

c++ - 使用 C++ 进行 OpenCv 相机校准(不支持的格式或格式组合错误)

python - 无法使用 zbar 扫描二维码