Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/opencv/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Kinect和opencv组合并显示深度和rgb图像_Opencv_Opengl_Image Processing_Kinect_Openni - Fatal编程技术网

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

如何使用Kinect和opencv组合并显示深度和rgb图像,opencv,opengl,image-processing,kinect,openni,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

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

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

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

3) 如何将两者结合起来,以及使用什么函数来显示输出


我们使用windows-64位和kinect作为3D传感器。我们计划使用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 mat(您可以使用my查看我的意思示例)
  • 是否要对rgb图像执行任何处理
  • 创建用于三维显示/操作的点云,为此我建议使用点云库,因为创建点云很容易,而且他们已经为其提供了显示
如果您对其中任何一个步骤有疑问,我可以给您一些代码片段,只要问一个新问题,我就会回答


我希望这对您有所帮助

我们在问题中添加了详细信息,您能在代码方面提供帮助吗??代码将rgb Mat获取到openCV,并最终显示3d图像。我们只需要捕获3D图像,在openCV中进行阈值设置和图像处理,最后在3D视图中显示图像。我们完成了OpenCV代码。因此,现在我们需要您的帮助来捕获图像,我们需要RGB mat进行opencv处理,然后最终在三维视图中以深度显示处理后的RGB mat。@AshokVarma是Kinect还是Kinect2?是Kinect而不是Kinect2 Ankyu verymuch。最后一个疑问是,我们能否直接将OpenCV mat转换为PointCloud??pointColud库是否优于OpenGL for 3Dimages@AshokVarma您可以将其转换为点云,您只需通过深度图像像素,在rgb图像中的同一位置您将找到相应的颜色,z值将是深度图像像素,你需要计算x和y值,pcl已经有了一些点云算法。。。在opengl中,您必须自己创建它们,但您可以做更多的事情