leon 1 mese fa
parent
commit
e6f485dba8
2 ha cambiato i file con 29 aggiunte e 37 eliminazioni
  1. 15 37
      src/nodes/httpPush/httpPush.cpp
  2. 14 0
      src/nodes/infer/inferNode.cpp

+ 15 - 37
src/nodes/httpPush/httpPush.cpp

@@ -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());

+ 14 - 0
src/nodes/infer/inferNode.cpp

@@ -3,9 +3,23 @@
 #include "common/image.hpp"
 #include <unordered_map>
 #include <random>
+#include <algorithm>
+
 namespace Node
 {
 
+
+void print_mat(const cv::Mat& mat, int max_rows = 10, int max_clos = 10)
+{
+    for (int i = 0; i < std::min(max_rows, mat.rows); i++) {
+        for (int j = 0; j < std::min(max_clos, mat.cols); j++) {
+            std::cout << mat.at<float>(i,j) << " ";
+        }
+        std::cout << (bigMat.cols > max_clos ? "..." : "") << std::endl;
+    }
+    if (mat.rows > max_rows) std::cout << "[...]" << std::endl;
+}
+
 void InferNode::work()
 {
     printf("InferNode %s\n", name_.c_str());