From 7de2077960eb907c305c000c39d9084ec88e4a82 Mon Sep 17 00:00:00 2001 From: yangjiaxuan <171295266@qq.com> Date: Fri, 1 Dec 2023 18:13:13 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0=E7=AD=94=E9=A2=98=E5=8D=A1?= =?UTF-8?q?=E9=99=A4=E7=BA=A2=E7=AE=97=E6=B3=95=EF=BC=8C=E8=A7=A3=E5=86=B3?= =?UTF-8?q?=E7=AD=94=E9=A2=98=E5=8D=A1=E9=99=A4=E7=BA=A2=E4=BC=9A=E9=99=A4?= =?UTF-8?q?=E6=8E=89=E7=BB=BF=E8=89=B2=E5=92=8C=E6=A9=99=E8=89=B2=E7=AD=89?= =?UTF-8?q?=E9=A2=9C=E8=89=B2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ImageProcess/ImageApplyHSVCorrect.cpp | 26 ++++++++++++++++--- hgdriver/ImageProcess/ImageApplyHSVCorrect.h | 21 ++++++++++----- 2 files changed, 37 insertions(+), 10 deletions(-) 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();