#pragma once #include "afxcoll.h" #include #include #include "CxImage/CxImage/ximage.h" #include "..\Xy.h" struct ColorPoint { int R; int G; int B; double zValue; }; class AFX_EXT_CLASS GenerateImageMesh { public: // 颜色采样方式 enum ColorMethod { HSV_M = 0, //HSV极端方法 UNIFORMSAMPLING_M = 1, //均匀采样方法 KMEANS_M = 2 //K-Means聚类方法 }; // 颜色排序方式 enum SortMethod { BRIGHTNESS_SORT = 0, //亮度(升序) HUE_SORT_COLD = 1, //色调冷 HUE_SORT_WARM = 2, //色调暖 HUE_SORT = 3 }; GenerateImageMesh(); ~GenerateImageMesh(); //设置输入数据 void SetImageBase(CxImage image); void SetImageBase(const std::string& path); std::string GetImagePath(); //设置色标(默认色标) void SetColorCardPath(const std::string& path); std::string GetColorCardPath(); void SetGridNumber(int num); int GetGridNumber(); void SetZminByZmax(double zMin, double zMax); double GetZmin(); double GetZmax(); /** * 自动获取生成色标文件组成色彩(默认由冷到暖) * \param colorVectors 颜色和z值集合(z值从小到大) * \param ColorMethod 颜色采样方式 * \param SortMethod 颜色排序方式 * \param numColors 提取数量 * \return */ bool CreateColorBarData(std::vector& colorPVector, GenerateImageMesh::ColorMethod type, GenerateImageMesh::SortMethod sortType, int numColors = 5); /** * 生成色标文件: * \param colorVector 颜色和z值集合(z值从小到大) * \param barSavePath 色标文件路径 * \param xmlPath 色标文件xml * \param width 色标文件图片宽 * \param height 色标文件图片高 * \return */ bool CreateMeshColorBar(const std::vector& colorVector, const std::string& barSavePath, double minz, double maxz, const std::string& xmlPath = "", int width = 1200, int height = 60); // 生成网格图像数据 CMesh * CreateImageMeshProcess(int numX, int numY , double dLocationX, double dLocationY , double dDeltX, double dDeltY, double dmaxX, double dmaxY , const std::vector& colorVector, const std::vector& colorListVector); bool CreateImageMesh(int numX, int numY , double dLocationX, double dLocationY, double dDeltX, double dDeltY , double dmaxX, double dmaxY, const std::vector& colorVector); double FindThirdValues(const std::vector>& data, int first, int second); protected: void Init(); bool LaodImageCV();//加载内存数据 private: int m_num; //网格大小(10 10*10) double m_zMinCV; //最开始创建的区间值 double m_zMaxCV; std::string m_colorCardPath; //颜色卡 std::string m_imagePath; //图像 CxImage m_xImage; //输入图像内存数据 CMesh *p_mesh; };