【问题标题】:In opencv's solvePnP, what should I pass for objectPoints?在opencv的solvePnP中,我应该为objectPoints传递什么?
【发布时间】:2016-06-24 12:27:25
【问题描述】:
OpenCV docs for solvePnp
在增强现实应用程序中,我检测到场景中的图像,所以我知道 imagePoints,但我正在寻找的对象 (objectPoints) 是一个虚拟标记,只是存储在内存中以在场景中搜索,所以我不知道不知道它在太空中的什么地方。
我正在阅读的书(Mastering OpenCV with Practical Computer Vision Projects)通过它,好像标记是一个 1x1 矩阵,它工作正常,怎么样?
solvePnP 不需要知道对象的大小及其投影,以便我们知道应用了多少比例?
【问题讨论】:
标签:
opencv
computer-vision
augmented-reality
pose-estimation
【解决方案1】:
假设您正在寻找一个物理对象,您应该将模型上点的 3D 坐标传递给(通过投影)映射到图像中的 2D 点。您可以使用任何参考系,solvePnp 的结果将为您提供相机在该参考系中的位置和方向。
如果您想获取相机空间中的对象位置/方向,则可以通过从 solvePnp 获得的变换的逆进行变换,以便将相机移动到原点。
例如,对于大小为 2x2x2 的立方体对象,可见角可能类似于:{-1,-1,-1},{1,-1,-1},{1,1,-1}.....
【解决方案2】:
您必须传递要与图像映射的真实世界对象的 3D 坐标。缩放和旋转值取决于您使用的坐标系。
这并不像听起来那么难。有关头部姿势估计,请参阅 this blog post。有关代码的更多详细信息。