在OpenCV中的3D渲染

时间:2012-06-01 14:28:26

标签: opencv

我正在做一个关于场景3D渲染的项目。我正在使用OpenCV。我正在做的步骤是这样的:

  1. 拍摄一张场景的两张照片。
  2. 使用SURF特征匹配计算对象对应关系。
  3. 计算相机基本矩阵。
  4. 计算视差图像。
  5. 现在我有两个问题

    1. 计算基本矩阵后,如何计算Q矩阵? (我无法校准相机)

    2. 如何使用opencv或任何其他库在3D中渲染?

3 个答案:

答案 0 :(得分:5)

对于3D部件,您可以使用OpenGL或PCL渲染场景。你有两个解决方案:

  • 对于每个像素,使用从相机图像中提取的正确颜色制作一个点。这将为您提供可以使用PCL处理的点云(例如,用于3D特征提取)。
  • 您应用了三角测量算法,但为了应用此算法,您必须拥有相机的外在矩阵。

您可以在此处找到有关这些技术的更多信息:

如果要使用OpenGL,则必须打开有效的OpenGL上下文。我推荐你SFML库或Qt。这些库非常易于使用,并且具有良好的文档。两者都有关于使用OpenGL进行3D渲染的教程。

答案 1 :(得分:2)

您可以通过openCV方法从立体声校正中获得Q矩阵:

cv::stereoRectify

我认为您希望Q矩阵重建3D。但是,您可以通过以下方式从内部参数重建:

X = (u-cu)*base/d
Y = (v-cv)*base/d
Z = f*base/d 

其中(u,v)是图像坐标系中的2D点,(cu,cv)是摄像机的主要点,f是焦距,base是基线,d是视差和(X ,Y,Z)是摄像机坐标系中的3D点。

答案 2 :(得分:1)

对于可视化,可以使用PCLVTK(PCL的可视化基于vtk,但对我来说更容易实现)。

如果您只想查看输出,可以使用Meshlab

等软件。

干杯