|
@@ -5,49 +5,27 @@
|
|
|
namespace Node
|
|
|
{
|
|
|
|
|
|
-static cv::Mat get_color_depth(const cv::Mat& depth, float min_range = 0.0f, float max_range = 0.0f) {
|
|
|
- // 检查输入数据类型
|
|
|
- CV_Assert(depth.type() == CV_32FC1 || depth.type() == CV_16UC1);
|
|
|
-
|
|
|
- cv::Mat validMask;
|
|
|
- cv::Mat depthFloat;
|
|
|
-
|
|
|
- // 转换为浮点类型并处理无效值
|
|
|
- if (depth.type() == CV_16UC1) {
|
|
|
- // 假设无效值为0(如Kinect深度图)
|
|
|
- validMask = (depth > 0);
|
|
|
- depth.convertTo(depthFloat, CV_32FC1, 1.0 / 1000.0); // 16UC1毫米转浮点米
|
|
|
- } else {
|
|
|
- validMask = (depth > 0);
|
|
|
- depthFloat = depth.clone();
|
|
|
- }
|
|
|
-
|
|
|
- // 自动计算有效范围(若未指定)
|
|
|
- if (min_range == 0.0f && max_range == 0.0f) {
|
|
|
- cv::minMaxLoc(depthFloat, &min_range, &max_range, 0, 0, validMask);
|
|
|
- }
|
|
|
+static cv::Mat get_color_depth(cv::Mat inverse_depth)
|
|
|
+{
|
|
|
+ double min_val, max_val;
|
|
|
+ cv::minMaxLoc(inverse_depth, &min_val, &max_val);
|
|
|
|
|
|
- // 归一化到0~255
|
|
|
- cv::Mat normalized;
|
|
|
- cv::Mat maskInv = ~validMask;
|
|
|
- if (max_range > min_range) {
|
|
|
- depthFloat.setTo(0, maskInv); // 屏蔽无效值
|
|
|
- depthFloat.convertTo(normalized, CV_8UC1, 255.0 / (max_range - min_range), -min_range * 255.0 / (max_range - min_range));
|
|
|
- } else {
|
|
|
- normalized = cv::Mat::zeros(depth.size(), CV_8UC1);
|
|
|
- }
|
|
|
+ float max_invdepth_vizu = std::min(static_cast<float>(max_val), 1.0f / 0.1f);
|
|
|
+ float min_invdepth_vizu = std::max(static_cast<float>(1.0 / 250.0), static_cast<float>(min_val));
|
|
|
|
|
|
- // 应用伪彩色映射(JET)
|
|
|
- cv::Mat colorized;
|
|
|
- cv::applyColorMap(normalized, colorized, cv::COLORMAP_JET);
|
|
|
+ cv::Mat inverse_depth_normalized = (inverse_depth - min_invdepth_vizu) / (max_invdepth_vizu - min_invdepth_vizu);
|
|
|
+
|
|
|
+ cv::Mat inverse_depth_normalized_8u;
|
|
|
+ inverse_depth_normalized.convertTo(inverse_depth_normalized_8u, CV_8UC1, 255);
|
|
|
|
|
|
- // 标记无效区域为红色
|
|
|
- colorized.setTo(cv::Scalar(0, 0, 255), maskInv);
|
|
|
+ cv::Mat color_depth;
|
|
|
+ cv::applyColorMap(inverse_depth_normalized_8u, color_depth, cv::COLORMAP_JET);
|
|
|
|
|
|
- return colorized;
|
|
|
+ cv::Mat color_depth_bgr;
|
|
|
+ cv::cvtColor(color_depth, color_depth_bgr, cv::COLOR_BGR2RGB);
|
|
|
+ return color_depth_bgr;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
void HttpPushNode::work()
|
|
|
{
|
|
|
printf("HttpPush %s\n", name_.c_str());
|