Я использую OpenNI и OpenCV (но без последнего кода с поддержкой openni). Если я просто отправлю канал глубины на экран - он будет выглядеть темным и трудно что-то понять. Поэтому я хочу показать канал глубины для пользователя в цвете, но не могу найти, как это сделать, не теряя точности. Теперь я делаю это так:Преобразование глубины кинов в RGB
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 программное обеспечение для окон показывает мне. Поэтому я ищу функцию в OpenNI или OpenCV с лучшей трансформацией.
Не должен scaleFactor быть 255/max (глубина)? –
255.0/4096.0 = 0.062255859375, поэтому вы можете попробовать это. На практике не все 4096 значений можно использовать, хотя (по мере того как точность падает экспоненциально), я думаю. Если вы просто хотите применить другое отображение для визуализации, вы можете просто добавить слайдер для коэффициента масштабирования и немного поработать, чтобы получить масштабирование/диапазон, который вы хотите –