如何使用 Kinect 和 opencv 组合和显示深度和 rgb 图像
How to Combine and Display depth and rgb image using Kinect and opencv
我们正在做一个使用kinect和opencv的项目。我对 3D 分析完全陌生。主要目的是从kinect中获取深度和rgb信息,处理rgb mat(基本过滤和阈值函数)并将处理后的rgb图像与原始深度信息结合起来。我需要遵循基本步骤才能使用合适的应用程序(opencv、opengl、openni、kinect sdk 等)
1)如何将kinect的深度和rgb信息传递给opencv?
2) 我们可以单独访问rgb图像进行处理吗?
3) 如何结合两者,使用什么函数来显示输出?
我们使用 windows-64 位和 kinect 作为 3D 传感器。我们计划使用 OpenNI 获取图像的 rgb 和深度信息,然后在 OpenCV 中处理 rgb,然后在 OpenGL 的帮助下在 window 中显示图像(已处理的 RGB + 深度)。
首先,我认为你的问题太笼统了,这将取决于你使用什么 libraries/drivers...例如,如果你使用 openni 那么你将以一种方式传递信息,如果你使用kinect sdk 你将不得不使用另一种方法...
2) 是的,您可以独立于深度信息访问 RGB 图像并对其进行处理...
3) 将两者结合起来,我想你指的是深度和 rgb。这也取决于您使用的库和驱动程序。还有你想要存储它的方式,例如点云、图像等
我的建议是准确定义您想要实现的目标、使用哪些库以及在哪个操作系统中,然后编辑您的问题。
我使用 openni2、opencv 和 Qt 创建了一个工具,我只在 linux 中使用 primesense 相机和 structure.io 相机进行了测试,但您可能知道具体要做什么。这个工具可以做一些基本的阈值处理并以不同的格式(pcd、图像、oni)保存数据。 Link
我用的openni1和Avin的驱动和Kinect1摄像头也是差不多的方法,星期三我可以上传代码你可以看看,但基本上是一样的,只是初始化有点变化。
作为处理 RGB-D 图像时应该做的事情的基本清单:
- 初始化相机流
- 在opencv中创建一个矩阵,直接把数据copy进去,一定要看库的标准,比如openni用的是RGB数组做颜色矩阵,而KinectSDK用的是RGBA(至少kinect SDK 2.0) .还要确保深度矩阵是 16 位。
- 要显示深度矩阵,您必须对其进行归一化并将其更改为灰度矩阵。
- 您可以对图像进行任何处理,然后将它们保存为所需格式。
- 检查我给你的 link 以了解如何以最常见的格式保存它。
你也可以看看点云库,他们有一个很好的包装器可以完成这项工作,然后很容易把它变成点云。
希望这些信息对您有所帮助。
更新:
对于windows中的Kinect 1,可以安装最新的Kinect SDK并使用openni2,而无需安装额外的驱动程序。
- 只需安装 Kinect SDK 1.8(不是 2.0)
- 安装 Openni2
- 运行 NiViewer.exe 测试它是否有效(它在 openni 文件夹中)
如果到目前为止一切都很好,那么您只需要:
- 初始化openni
- 初始化颜色和深度流
- 执行一个主循环,将其复制到 OpenCV mat(您可以使用我的 code 查看我的意思的示例)
- 对 rgb 图像做任何你想做的处理
- 为 3D 创建点云 display/manipulation,为此我推荐点云库,因为创建点云很容易,而且他们已经有一个显示。
如果您对任何步骤有疑问,我可以给您代码片段,只需提出一个新问题,我会回答。
希望对您有所帮助
我们正在做一个使用kinect和opencv的项目。我对 3D 分析完全陌生。主要目的是从kinect中获取深度和rgb信息,处理rgb mat(基本过滤和阈值函数)并将处理后的rgb图像与原始深度信息结合起来。我需要遵循基本步骤才能使用合适的应用程序(opencv、opengl、openni、kinect sdk 等)
1)如何将kinect的深度和rgb信息传递给opencv?
2) 我们可以单独访问rgb图像进行处理吗?
3) 如何结合两者,使用什么函数来显示输出?
我们使用 windows-64 位和 kinect 作为 3D 传感器。我们计划使用 OpenNI 获取图像的 rgb 和深度信息,然后在 OpenCV 中处理 rgb,然后在 OpenGL 的帮助下在 window 中显示图像(已处理的 RGB + 深度)。
首先,我认为你的问题太笼统了,这将取决于你使用什么 libraries/drivers...例如,如果你使用 openni 那么你将以一种方式传递信息,如果你使用kinect sdk 你将不得不使用另一种方法...
2) 是的,您可以独立于深度信息访问 RGB 图像并对其进行处理...
3) 将两者结合起来,我想你指的是深度和 rgb。这也取决于您使用的库和驱动程序。还有你想要存储它的方式,例如点云、图像等
我的建议是准确定义您想要实现的目标、使用哪些库以及在哪个操作系统中,然后编辑您的问题。
我使用 openni2、opencv 和 Qt 创建了一个工具,我只在 linux 中使用 primesense 相机和 structure.io 相机进行了测试,但您可能知道具体要做什么。这个工具可以做一些基本的阈值处理并以不同的格式(pcd、图像、oni)保存数据。 Link
我用的openni1和Avin的驱动和Kinect1摄像头也是差不多的方法,星期三我可以上传代码你可以看看,但基本上是一样的,只是初始化有点变化。
作为处理 RGB-D 图像时应该做的事情的基本清单:
- 初始化相机流
- 在opencv中创建一个矩阵,直接把数据copy进去,一定要看库的标准,比如openni用的是RGB数组做颜色矩阵,而KinectSDK用的是RGBA(至少kinect SDK 2.0) .还要确保深度矩阵是 16 位。
- 要显示深度矩阵,您必须对其进行归一化并将其更改为灰度矩阵。
- 您可以对图像进行任何处理,然后将它们保存为所需格式。
- 检查我给你的 link 以了解如何以最常见的格式保存它。
你也可以看看点云库,他们有一个很好的包装器可以完成这项工作,然后很容易把它变成点云。
希望这些信息对您有所帮助。
更新: 对于windows中的Kinect 1,可以安装最新的Kinect SDK并使用openni2,而无需安装额外的驱动程序。
- 只需安装 Kinect SDK 1.8(不是 2.0)
- 安装 Openni2
- 运行 NiViewer.exe 测试它是否有效(它在 openni 文件夹中)
如果到目前为止一切都很好,那么您只需要:
- 初始化openni
- 初始化颜色和深度流
- 执行一个主循环,将其复制到 OpenCV mat(您可以使用我的 code 查看我的意思的示例)
- 对 rgb 图像做任何你想做的处理
- 为 3D 创建点云 display/manipulation,为此我推荐点云库,因为创建点云很容易,而且他们已经有一个显示。
如果您对任何步骤有疑问,我可以给您代码片段,只需提出一个新问题,我会回答。
希望对您有所帮助