我正在使用OpenNI和OpenCV(但没有最新的支持openni的代码)。如果我只把深度通道发送到屏幕上,它会看起来很暗,很难理解。所以我想展示一个带有颜色的深度通道给用户,但是找不到在不失精度的情况下如何实现。现在我的实现方式是这样的:
xn::DepthMetaData xDepthMap;
depthGen.GetMetaData(xDepthMap);
XnDepthPixel* depthData = const_cast<XnDepthPixel*>(xDepthMap.Data());
cv::Mat depth(frame_height, frame_width, CV_16U, reinterpret_cast<void*>(depthData));
cv::Mat depthMat8UC1;
depth.convertTo(depthMat8UC1, CV_8UC1);
cv::Mat falseColorsMap;
cv::applyColorMap(depthMat8UC1, falseColorsMap, cv::COLORMAP_AUTUMN);
depthWriter << falseColorsMap;
但是在这种情况下,我得到的输出比如 Kinect for Windows 软件显示给我的更差(失去了细节)。因此,我正在寻找 OpenNI 或 OpenCV 中具有更好转换功能的函数。