我正在使用 Kinect 创建一个人的 3D 模型。我得到的是这样的:
我将其导出到 Wavefront .obj 文件。但我只对脸部本身感兴趣,并想移除它周围的一切。由于 Kinect 有一个 RGB 相机,我可以毫无问题地在 RGB 中进行人脸检测。但这给了我一个包含面部的 640x480 图像内的矩形,我如何将其转换为 3D 网格?
最佳答案
我之前做过类似的事情:
视频 here
我做的很简单:
- 使用OpenCV的haar级联检测RGB图像中的人脸
- 使用检测到的面部矩形从深度图像中仅裁剪面部区域
- 将深度图像转换为深度值(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 的使用还不够多,所以目前不能说得更具体。
简而言之:
- 检测人脸
- 在深度图中隔离人脸区域
- 将深度图人脸区域转换为点云/网格等。
关于c++ - 从3D kinect模型中提取人脸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16735871/