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



我们正在使用kinect和opencv进行一个项目。我对三维分析完全陌生。主要目的是从kinect中获取深度和rgb信息,处理rgb矩阵(基本滤波和阈值函数),并将处理后的rgb图像与原始深度信息相结合。我需要使用合适的应用程序(opencv、opengl、openni、kinect-sdk等)的基本步骤

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

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

3) 如何将两者结合起来,使用什么功能来显示输出?

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

首先,我认为你的问题太笼统了,它将取决于你使用的库/驱动程序。。。例如,如果你使用openni,那么你就用一种方式传递信息,而如果你使用kinect sdk,你就必须使用另一种方法。。。

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

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

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

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

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

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

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

你也可以看看点云库,他们有一个很好的包装器来完成这项工作,然后很容易将它变成点云。

我希望这些信息对你有所帮助。

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

  • 只需安装Kinect SDK 1.8(不是2.0)
  • 安装Openni2
  • 运行NiViewer.exe以测试其工作情况(它在openni文件夹中)

如果到目前为止一切都很好,那么你只需要:

  • 初始化openni
  • 初始化颜色和深度流
  • 做一个主循环,将其复制到OpenCV垫子上(您可以使用我的代码来查看我的意思的示例)
  • 对rgb图像执行任何处理
  • 创建一个用于三维显示/操纵的点云,为此,我推荐点云库,因为创建点云很容易,而且他们已经有了它的显示

如果你对任何一个步骤有疑问,我可以给你代码片段,只要问一个新的问题,我就会回答。

我希望这能帮助你

最新更新