c++ - 从3D kinect模型中提取人脸

标签 c++ 3d kinect

我正在使用 Kinect 创建一个人的 3D 模型。我得到的是这样的:

Kinect image

我将其导出到 Wavefront .obj 文件。但我只对脸部本身感兴趣,并想移除它周围的一切。由于 Kinect 有一个 RGB 相机,我可以毫无问题地在 RGB 中进行人脸检测。但这给了我一个包含面部的 640x480 图像内的矩形,我如何将其转换为 3D 网格?

最佳答案

我之前做过类似的事情:

Max in depth

视频 here

我做的很简单:

  1. 使用OpenCV的haar级联检测RGB图像中的人脸
  2. 使用检测到的面部矩形从深度图像中仅裁剪面部区域
  3. 将深度图像转换为深度值(3d 点云/网格等)

理想情况下,您会校准两个(rgb、深度)流。

我使用的是 libreenect,但该技术应该适用于 OpenNI、KinectSDK。

我注意到您的应用程序的标题是 KinectFusion,所以我猜您是从 Microsoft Kinect SDK 1.7 中的 Kinect Fusion 示例开始的。应该有一个内置函数来对齐 rgb 和深度流。关于 CV 部分,您可以在线找到 Kinect 到 OpenCV Mat 的转换,例如 Dennis Ippel functions例如。 EgmuCV还有那个人脸检测。而且 KinectSDK 本身允许您在 3D 中跟踪面部,所以我怀疑 SDK 中一定有用于面部检测(甚至不是跟踪)的东西。我自己对 Kinect SDK 的使用还不够多,所以目前不能说得更具体。

简而言之:

  1. 检测人脸
  2. 在深度图中隔离人脸区域
  3. 将深度图人脸区域转换为点云/网格等。

关于c++ - 从3D kinect模型中提取人脸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16735871/

相关文章:

c# - kinect色框里面的按钮

c++ - (C++) 编译时自动生成switch语句case

c++ - 使用 gcc 插件获取类注释

c++ - 传入函数原型(prototype)的二维数组

c++ - 在 C++ 中将一个类声明为 "final : public virtual"有用吗?

3d - 重用多个模型的动画?

3d - 如何从实感相机中提取浊点?

android - 如何在布局动画结束时触发动画

Kinect v2 : Spatial resolution/depth resolution/camera calibration

opencv - 数数站在我们 Kinect 前面的人数