如何使用opencv在视频中放置对象

时间:2014-03-04 19:16:14

标签: c++ opencv

好的,所以我用棋盘图像来校准我的相机。这校准了场景的内在和外在参数。现在我想绘制一个物体坐在我放置棋盘的桌子上。我的问题是需要相机的旋转+平移向量才能做到这一点吗?如果是这样,我怎样才能在校准后得到这些?或者在calibrateCamera函数中考虑了这些向量?

基本上在校准相机后,我现在如何在表面上绘制场景?

谢谢!

2 个答案:

答案 0 :(得分:3)

calibrateCamera函数为您提供外在(旋转+平移)和内在(相机矩阵K和失真系数)。

这允许您将以棋盘坐标系表示的3D点投影到相机获取的图像中,例如使用projectPoints函数(link)。使用此方法,您可以使用projectPoints函数投影3D边缘,将线框对象直接绘制到图像中。

如果你想渲染更复杂的对象(包括纹理等),这需要使用辅助渲染引擎,因为OpenCV不提供这样的功能。您将不得不使用渲染引擎,比如说OpenGL,为它提供投影细节,从缓冲区中的摄像机视点检索渲染的对象,并将此缓冲区覆盖在初始图像的顶部。

然而,请注意,这种称为增强现实的结果有时可能看起来很奇怪,因为它没有考虑渲染对象与图像中观察到的场景之间的遮挡......适当处理遮挡需要场景的3D模型。

答案 1 :(得分:0)

AldourDisciple post是一个很好的答案。

如果我可以加2美分,这是我使用的一个问题,这是增强现实的基本问题,更一般地说是如何集成OpenCV和OpenGL(因为你将使用OpenGL来绘制3d内容并使用OpenGL纹理显示视频中的下划线OpenCV图像。您可以在我的previous answer中找到一些(imho)良好的链接,文档,教程和参考资料。