首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不带摄像头和失真矩阵的OpenCV resolvePnP

不带摄像头和失真矩阵的OpenCV resolvePnP
EN

Stack Overflow用户
提问于 2012-01-12 01:50:57
回答 1查看 1.4K关注 0票数 0

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

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

为了得到这两个矩阵,我使用了solvePnP,我必须为它提供一个相机矩阵和一个失真矩阵,据我所知,这两个矩阵对于每种相机类型都是特定的。不幸的是,这对我来说是一个巨大的缺点,因为大多数安卓设备都应该支持这款应用,而且我也不能要求用户运行摄像头校准程序(由openCV提供的功能)。

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

我试过QCAR和Unity AR,但(因为3D模型是从服务器上下载的,而且不断变化),我被迫使用OpenCV。

任何帮助都将不胜感激。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2012-01-12 15:33:13

对你来说是个坏消息。答案是一个明确的、不可撤销的、巨大的不。

如果你对你的相机一无所知,你真的无法知道任何关于你的图像的事情。相机由两个矩阵来描述:相机垫和失真垫。

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

在许多AR应用中,失真矩阵可以忽略不计。你就是不关心小的扭曲。

如果你知道摄像机的视野,摄像机矩阵可以很容易地构造出来:

代码语言:javascript
运行
复制
w/(2*tan(camera.fovX())), 0, w/2, 0,
0, h/(2*tan(camera.fovY())), h/2, 0,
0, 0,   1, 0

现在,你会说你已经变好变坏了:你需要相机fov,为此你需要校准。好消息是,在android上你可以使用getHorizontalAperture()getVerticalAperture(),或者别的什么。孔径==视场。

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

祝你好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8824126

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档