#ifndef COLORCOMPARISONBFACE_H #define COLORCOMPARISONBFACE_H #include #include #include #include #include // 不使用前向声明,直接定义简单的颜色结构 struct MeshColor { unsigned char r, g, b; MeshColor() : r(0), g(0), b(0) {} MeshColor(unsigned char r, unsigned char g, unsigned char b) : r(r), g(g), b(b) {} unsigned char operator[](size_t idx) const { if (idx == 0) return r; if (idx == 1) return g; if (idx == 2) return b; return 0; } }; class ColorComparisonFace { private: // 单面信息结构 struct FaceColorInfo { int faceId; // 面的ID MeshColor gaussianColor; // 高斯颜色 MeshColor originalColor; // 原始颜色 cv::Mat triangleRegion; // 带透明通道的三角形区域 cv::Mat visualization; // 三角形可视化图像 float colorDistance; // 颜色距离 float threshold; // 阈值 std::string filename; // 文件名 }; // 连续区域信息结构 struct ContinuousRegionInfo { int regionId; // 区域ID std::set faceIds; // 修改为 unsigned int MeshColor regionGaussianColor; // 区域的整体高斯颜色 std::map viewColors; // 每个视图的颜色 std::map viewRegions; // 每个视图的区域图像 std::map viewVisualizations; // 每个视图的可视化 std::map viewDistances; // 每个视图的距离 int totalPixels; // 区域总像素数 }; // 使用嵌套map: faceid -> filename -> FaceColorInfo列表 std::map>> faceViewColorMap; // 连续区域映射: regionId -> ContinuousRegionInfo std::map continuousRegions; std::string outputDir; public: // 构造函数 ColorComparisonFace(const std::string& dir); // 析构函数 virtual ~ColorComparisonFace() {} // 添加精确三角形信息(替代原来的addColorInfo) void addExactTriangleInfo(int faceId, MeshColor gaussianColor, MeshColor originalColor, const cv::Mat& triangleRegionWithAlpha, // 带透明通道 const cv::Mat& visualization, // 可视化图像 float colorDistance, float threshold, const std::string& filename); // 添加连续区域信息 void addContinuousRegionInfo(int regionId, const std::set& faceIds, // 修改为 unsigned int MeshColor regionGaussianColor); // 添加连续区域在特定视图中的信息 void addRegionViewInfo(int regionId, const std::string& filename, MeshColor viewColor, const cv::Mat& regionImage, const cv::Mat& visualization, float colorDistance); // 创建三角形区域对比图 void createBatchComparison(int maxBlocksPerRow = 6, int maxFacesPerImage = 20); // 创建连续区域跨视图比较图 void createContinuousRegionComparison(int maxBlocksPerRow = 6, int maxRegionsPerImage = 20); // 保存颜色信息到CSV文件 void saveColorInfoToFile(); // 获取总face数 int getTotalFaces() const; // 获取总记录数 int getTotalRecords() const; // 获取faceid列表 std::vector getFaceIds() const; // 获取连续区域数 int getTotalRegions() const; }; #endif // COLORCOMPARISONBFACE_H