首页 文章

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

提问于
浏览
3

我们正在使用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 回答

  • 2

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

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

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

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

    我使用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 .

    我希望这些信息对您有所帮助 .

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

    • 只需安装Kinect SDK 1.8(不是2.0)

    • 安装Openni2

    • 运行NiViewer.exe来测试它的工作原理(它在openni文件夹中)

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

    • 初始化openni

    • 初始化颜色和深度流

    • 做一个主循环,你将它复制到OpenCV垫(你可以使用我的code看一个我的意思的例子)

    • 对rgb图像执行任何您想要的过程

    • 为3D显示/操作创建点 Cloud ,为此我推荐Point Cloud Library,因为它很容易创建点 Cloud ,并且它们已经有了显示 .

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

    我希望这可以帮助你

相关问题