如何使用Kinect和opencv组合和显示深度和rgb图像

时间:2015-03-22 15:29:32

标签: opencv opengl image-processing kinect openni

我们正在使用kinect和opencv做一个项目。我是3D分析的新手。主要目的是从kinect获取深度和rgb信息,处理rgb mat(基本过滤和阈值函数)并将处理后的rgb图像与原始深度信息相结合。我需要基本的步骤来使用合适的应用程序(opencv,opengl,openni,kinect sdk等)

1)如何将深度和rgb信息从kinect传递给opencv?

2)我们可以单独访问rgb图像进行处理吗?

3)如何将两者和用于显示输出的函数结合起来?

我们使用windows-64 bit和kinect作为3D传感器。我们计划使用OpenNI获取图像rgb和深度信息,然后在OpenCV中处理rgb,然后在OpenGL的帮助下在窗口中显示图像(处理RGB +深度)。

1 个答案:

答案 0 :(得分:2)

首先,我认为你的问题太笼统了,这将取决于你使用的库/驱动程序...例如,如果你使用openni然后你以一种方式传递信息,如果你使用kinect sdk你将不得不使用另一种方法...

2)是的,您可以独立于深度信息访问RGB图像并进行处理......

3)结合两者,我想你的意思是深度和rgb。这还取决于您使用的库和驱动程序。您想要存储它的方式,例如点云,图像等

我的建议是准确定义您想要实现的目标,使用哪些库以及在哪个操作系统中编辑您的问题。

我使用openni2,opencv和Qt创建了一个工具,我只用linux中的primesense相机和structure.io相机进行了测试,但你可能会知道该怎么做。该工具可以进行一些基本的阈值处理,并以不同的格式(pcd,images,oni)保存数据。 Link

我也使用了与openni1和Avin的驱动程序和Kinect1相机几乎相同的方法,周三我可以上传代码你可以看看,但基本上是一样的,只是初始化改变了一点位。

作为使用RGB-D图像时应该做的事情的基本清单:

  • 初始化相机流
  • 在opencv中创建一个矩阵并将数据​​直接复制到它,一定要读取库的标准,例如,openni使用RGB数组作为颜色矩阵,而KinectSDK使用RGBA(至少kinect SDK 2.0)。还要确保深度矩阵为16位。
  • 要显示深度矩阵,必须对其进行标准化并将其更改为灰度矩阵。
  • 您可以对图像进行任何操作,然后将其保存为所需格式。
  • 检查我给你的链接,看看如何以最常见的格式保存它。

此外,您可以查看Point Cloud Library,他们有一个很好的包装器可以完成这项工作,然后很容易将它变成一个pointcloud。

我希望这些信息可以帮到你。

<强>更新 对于Windows中的Kinect 1,可以安装最新的Kinect SDK并使用openni2而无需安装其他驱动程序。

  • 只需安装Kinect SDK 1.8(不是2.0)
  • 安装Openni2
  • 运行NiViewer.exe以测试它是否有效(它位于openni文件夹中)

如果一切顺利,那么你只需要:

  • 初始化openni
  • 初始化颜色和深度流
  • 做一个主循环,你将它复制到一个OpenCV垫(你可以使用我的code看一个我的意思的例子)
  • 对rgb图像进行任何处理
  • 为3D显示/操作创建一个点云,为此我建议使用Point Cloud Library,因为它很容易创建一个点云,而且它们已经有了显示。

如果您对任何步骤有疑问,我可以给您代码片段,只是问一个关于它的新问题,我会回答它。

我希望这有助于你