while (!protonect_shutdown) {
for (int i = 0; i < devices.size(); ++i) {
listeners[i]->waitForNewFrame(frames[i]); // 等待新的帧到来
// 获取各类帧
libfreenect2::Frame* rgb = frames[i][libfreenect2::Frame::Color]; // 获取颜色帧
libfreenect2::Frame* ir = frames[i][libfreenect2::Frame::Ir]; // 获取红外帧
libfreenect2::Frame* depth = frames[i][libfreenect2::Frame::Depth]; // 获取深度帧
// 将 libfreenect2::Frame 转换为 cv::Mat
cv::Mat rgb_img(rgb->height, rgb->width, CV_8UC4, rgb->data); // RGB 帧,通常是 CV_8UC4 类型
cv::Mat ir_img(ir->height, ir->width, CV_8UC1, ir->data); // IR 帧,通常是 CV_8UC1 类型
cv::Mat depth_img(depth->height, depth->width, CV_16UC1, depth->data); // Depth 帧,通常是 CV_16UC1 类型
// 保存图像到文件
cv::imwrite("rgb_image.png", rgb_img); // 保存 RGB 图像
cv::imwrite("ir_image.png", ir_img); // 保存 IR 图像
cv::imwrite("depth_image.png", depth_img); // 保存 Depth 图像
// 释放帧
listeners[i]->release(frames[i]);
}
}