没有摄像头和失真矩阵的OpenCV resolvePnP

时间:2012-01-11 17:50:57

标签: android opencv

我正在尝试制作用于Android的AR应用程序,用户将相机指向方形标记,并且3D模型应显示在标记的顶部。

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

为了得到这两个矩阵,我使用resolvePnP,我必须提供一个相机矩阵和一个 失真矩阵巫婆(根据我的理解)是针对每种相机类型的。 不幸的是,这对我来说是一个巨大的缺点,因为应用程序应该得到大多数Android设备的支持,我也不能要求用户运行相机校准程序(openCV提供的功能)。

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

我尝试过QCAR和Unity AR但是(因为3D模型是从服务器下载并且不断更改)我被迫使用OpenCV。

任何帮助都将非常感激。

感谢。

1 个答案:

答案 0 :(得分:1)

对你来说是坏消息。答案是肯定的,不可改变的,不是很重要的。

如果您对相机一无所知,那么您对图像一无所知。相机由两个矩阵描述:相机垫和扭曲垫。

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

在许多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()等等。 Aperture == fov。

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

祝你好运!