gpt4 book ai didi

opencv - 将kinects深度转换为RGB

转载 作者:太空宇宙 更新时间:2023-11-03 20:58:51 24 4
gpt4 key购买 nike

我正在使用 OpenNI 和 OpenCV(但没有支持 openni 的最新代码)。如果我只是将深度 channel 发送到屏幕 - 它看起来会很暗并且很难理解某些东西。所以我想用一种颜色为用户显示一个深度 channel ,但找不到在不损失准确性的情况下如何做到这一点。现在我这样做:

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;

但在这种情况下,我得到的(丢失细节)输出比 Windows 的 kinects 软件显示的更差。所以我正在寻找 OpenNI 或 OpenCV 中具有更好转换的函数。

最佳答案

ghttps://github.com/OpenNI/OpenNI2/blob/master/Samples/Common/OniSampleUtilities.h该链接是直方图均衡的代码。简而言之,它使每个级别的概率相等,并优化了 10,000 级别和 255 级别之间的映射。这就是为什么 Kinect 淡黄色 map 看起来比原始 I=255*z/z_range 更好。

注意:不要使用颜色进行可视化,因为人眼对亮度变化比对颜色变化更敏感。因此,与 255*255*255 级别的颜色相比,255 级别的亮度会获得更好的对比度。如果您仍然决定沿颜色映射途径使用 HSV 颜色空间,您可以在其中操纵色调 0..360 度,值 1..0 并将饱和度设置为最大。将深度映射到色调和值,转换为 RGB 并显示。比回到直方图均衡化;)

关于opencv - 将kinects深度转换为RGB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17944590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com