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



我正在尝试为android制作一个AR应用程序,用户将相机指向一个方形标记,3d模型应该显示在标记的顶部。

我正在使用OpenCV来获得标记的旋转和平移,但是。。

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

那么问题来了:有没有办法消除相机和失真矩阵?或者,是否有其他方法可以计算标记相对于设备的3D位置?

我尝试了QCAR和Unity AR,但(由于3D模型是从服务器下载的,并且不断变化),我被迫使用OpenCV。

任何帮助都将不胜感激。

谢谢。

对您来说是个坏消息。答案是否定的。

如果你对你的相机一无所知,你就无法对你的图像一无所知。相机由两个矩阵描述:相机矩阵和失真矩阵

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

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

如果知道摄像机的视场,就可以构造出摄像机矩阵。摄像头矩阵:

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

在Android上,有一个API用于检索光圈:getHorizontalAperture()getVerticalAperture()。光圈是视野。

然而,在许多手机上,返回的值是不正确的,因为制造商不在乎设置正确。它可能会返回像10度或180度这样的伪角度。除了测试个别型号的手机外,没有什么好方法可以解决这个问题。

祝你好运!

最新更新