2012-01-11 101 views
0

我想为女巫的android应用程序制作一个AR应用程序,用户将摄像头指向方形标记,并且3D模型应该显示在标记顶部。OpenCV resolvePnP没有摄像头和失真矩阵

我使用的OpenCV来获取标记的旋转和平移,但..

要得到这些2点矩阵我用resolvePnP女巫我必须提供一个摄像头矩阵和 失真矩阵女巫(从我理解)对于每种相机类型都是特定的。 不幸的是,这对我来说是一个巨大的缺陷,因为应用程序应该受到大多数android设备的支持,我也不能要求用户运行相机校准程序(由openCV提供的功能)。

所以问题:有没有办法消除相机矩阵和失真矩阵?或者,还有另一种方式来计算相对于设备的标记3D位置?

我尝试QCAR和Unity AR,但(因为3D模型从服务器下载并不断变化)我被迫去OpenCV。

任何帮助将非常感激。

谢谢。

回答

1

坏消息给你。答案是一个明确的,不可撤销的,大NO NO。

如果您不了解相机的任何信息,您实在无法知晓任何有关您图片的内容。相机由两个矩阵描述:相机垫和变形垫。

但是,伴随着坏消息,还有一些好消息。也许,你可以做点什么。

失真矩阵在许多AR应用中可以忽略。你只是不在乎小的扭曲。

和相机矩阵可以,如果你知道的视摄像头的视野可轻松构造: 摄像头矩阵:

w/(2*tan(camera.fovX())), 0, w/2, 0, 
0, h/(2*tan(camera.fovY())), h/2, 0, 
0, 0, 1, 0 

现在,你会说,你变好坏:你需要相机FOV和为此你需要校准。好消息是,在android上你可以得到Horizo​​ntalAperture()和getVerticalAperture()等等。光圈== fov。

最后,真是个坏消息:在很多手机上,返回的值不仅仅是正确的。因为制造商不关心它。它返回假角度:10度,180度等。

祝你好运!