Конвертировать глубину кинектов в RGB
Я использую 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;
Но в этом случае я получаю худшую (теряющую детализацию) информацию, чем, например, программа kinects для Windows. Поэтому я ищу функцию в OpenNI или OpenCV с лучшим преобразованием.
2 ответа
Попробуй это:
const float scaleFactor = 0.05f;
depth.convertTo(depthMat8UC1, CV_8UC1, scaleFactor);
imshow("depth gray",depthMat8UC1);
Играйте со значением, чтобы получить результат, которым вы довольны
ghttps://github.com/OpenNI/OpenNI2/blob/master/Samples/Common/OniSampleUtilities.h ссылка является кодом для выравнивания гистограммы. Короче говоря, это делает вероятность каждого уровня равной и оптимизирует отображение между 10000 уровней и 255 уровней. Вот почему желтоватая карта Kinect выглядит лучше, чем наивная I=255*z/z_range.
ПРИМЕЧАНИЕ: не используйте цвет для визуализации, поскольку человеческий глаз более чувствителен к изменению яркости, чем к изменению цвета. Таким образом, с 255 уровнями яркости вы получите лучший контраст, чем с 255*255*255 уровнями цвета. Если вы все-таки решили идти по пути цветового картографирования, используйте цветовое пространство HSV, где вы можете манипулировать оттенком 0..360 градуса, значением 1..0 и лучше установить насыщенность на макс. Глубина карты для оттенка и значения, конвертировать в RGB и отображать. Чем вернуться к выравниванию гистограммы;)