diff --git a/hgdriver/ImageProcess/ImageApplyHSVCorrect.cpp b/hgdriver/ImageProcess/ImageApplyHSVCorrect.cpp index 655249c..25f91f7 100644 --- a/hgdriver/ImageProcess/ImageApplyHSVCorrect.cpp +++ b/hgdriver/ImageProcess/ImageApplyHSVCorrect.cpp @@ -1,18 +1,36 @@ #include "ImageApplyHSVCorrect.h" #include -CImageApplyHSVCorrect::CImageApplyHSVCorrect(CorrectOption mode, bool cvtColor, uint bgr) +CImageApplyHSVCorrect::CImageApplyHSVCorrect(CorrectOption mode, bool cvtColor, uint bgr, uint alpha) : m_table(new uint[256 * 256 * 256]) { initLUT(); + uint temp; switch (mode) { case CImageApplyHSVCorrect::Red_Removal: - set_HSV_value(std::pair(0, 63), std::pair(30, 255), std::pair(120, 255), bgr, cvtColor); + set_HSV_value(std::pair(0, 10), std::pair(30, 255), std::pair(120, 255), bgr, cvtColor); set_HSV_value(std::pair(200, 255), std::pair(30, 255), std::pair(120, 255), bgr, cvtColor); break; case CImageApplyHSVCorrect::LowSaturation_Removal: - set_HSV_value(std::pair(0, 255), std::pair(0, 30), std::pair(0, 255), bgr, cvtColor); + if (alpha < 0) + temp = 35; + else + temp = alpha; + set_HSV_value(std::pair(0, 255), std::pair(0, temp), std::pair(0, 255), bgr, cvtColor); + break; + case CImageApplyHSVCorrect::FXB_Color_Cast: + set_HSV_value(std::pair(45, 105), std::pair(0, 255), std::pair(0, 255), 0x00FFFFFF, true); + set_HSV_value(std::pair(180, 235), std::pair(0, 255), std::pair(0, 255), 0x00FFFFFF, true); + set_HSV_value(std::pair(0, 30), std::pair(0, 50), std::pair(0, 255), 0x00FFFFFF, true); + break; + case CImageApplyHSVCorrect::LM_Color_Cast: + set_HSV_value(std::pair(45, 105), std::pair(0, 255), std::pair(0, 255), 0x00FFFFFF, true); + set_HSV_value(std::pair(180, 235), std::pair(0, 100), std::pair(0, 255), 0x00FFFFFF, true); + set_HSV_value(std::pair(0, 30), std::pair(0, 60), std::pair(0, 255), 0x00FFFFFF, true); + break; + case CImageApplyHSVCorrect::RESERVE_RED: + set_HSV_value(std::pair(45, 220), std::pair(0, 255), std::pair(0, 255), 0x00FFFFFF, true); break; default: break; @@ -149,7 +167,7 @@ void CImageApplyHSVCorrect::RGB_2_HSV_full(int r, int g, int b, uchar& h, uchar& return; } else - s = static_cast(delta * 255 / maxx); + s = delta; if (r == maxx) _h = static_cast(g - b) / static_cast(delta); diff --git a/hgdriver/ImageProcess/ImageApplyHSVCorrect.h b/hgdriver/ImageProcess/ImageApplyHSVCorrect.h index 1da8d73..1e97173 100644 --- a/hgdriver/ImageProcess/ImageApplyHSVCorrect.h +++ b/hgdriver/ImageProcess/ImageApplyHSVCorrect.h @@ -11,7 +11,12 @@ v1.4 2022/04/22 增加功能,支持用像素灰度值填充原来彩色像素;删除默认构造函数;增加校正选项Deafault和LowSaturation_Removal v1.4.1 2022/04/25 调整数据类型,避免数据访问越界。 v1.4.2 2022/06/09 修复一个内存大小的错误。 - * 版本号:v1.4.2 + v1.5 2022/08/22 调整饱和度计算方式;构造函数增加参数alpha,用于微调部分模式的参数。 + v1.5.1 2022/09/23 添加风向标除偏色预设方案 + v1.5.2 2022/10/26 添加鹿鸣除偏色预设方案 + v1.5.3 2023/03/22 添加保留红色像素预设方案 + v1.5.4 2023/12/01 微调除红H范围 + * 版本号:v1.5.4 * * ==================================================== */ @@ -26,17 +31,21 @@ class GIMGPROC_LIBRARY_API CImageApplyHSVCorrect : public CImageApply public: enum CorrectOption { - Deafault, //默认,无任何除色效果 - LowSaturation_Removal, //除掉低饱和度像素 - Red_Removal //除掉红色。红色定义H:[0, 85]∪[170, 255],S:[10, 255],V:[120,255] + Default, //默认,无任何除色效果 + LowSaturation_Removal, //除掉低饱和度像素 + Red_Removal, //除掉红色。红色定义H:[0, 85]∪[170, 255],S:[10, 255],V:[120,255] + FXB_Color_Cast, //风向标消除偏色 + LM_Color_Cast, //鹿鸣消除偏色 + RESERVE_RED //保留红色像素 }; public: /* * mode [in]:预设初色模式 * cvtColor [in]:替代像素使用默认值,还是使用灰度值。true为灰度值,false为默认值 - * bgr:[in] 用uint表示BGR值,B在低位,R在高位。(当cvtGray 为false时生效) + * bgr [in] 用uint表示BGR值,B在低位,R在高位。(当cvtGray 为false时生效) + * alpha [int] 用于调整LowSaturation_Removal模式的强度。当alpha为负时,饱和度区间默认为[0, 35];当alpha为非负时,饱和度区间为[0, alpha]。 */ - CImageApplyHSVCorrect(CorrectOption mode = CorrectOption::Deafault, bool cvtColor = false, uint bgr = 0x00FFFFFF); + CImageApplyHSVCorrect(CorrectOption mode = CorrectOption::Default, bool cvtColor = false, uint bgr = 0x00FFFFFF, uint alpha = -1); virtual ~CImageApplyHSVCorrect();