更新答题卡除红算法,解决答题卡除红会除掉绿色和橙色等颜色

This commit is contained in:
yangjiaxuan 2023-12-01 18:13:13 +08:00
parent cfb1431efd
commit 7de2077960
2 changed files with 37 additions and 10 deletions

View File

@ -1,18 +1,36 @@
#include "ImageApplyHSVCorrect.h" #include "ImageApplyHSVCorrect.h"
#include <omp.h> #include <omp.h>
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]) : m_table(new uint[256 * 256 * 256])
{ {
initLUT(); initLUT();
uint temp;
switch (mode) switch (mode)
{ {
case CImageApplyHSVCorrect::Red_Removal: case CImageApplyHSVCorrect::Red_Removal:
set_HSV_value(std::pair<uchar, uchar>(0, 63), std::pair<uchar, uchar>(30, 255), std::pair<uchar, uchar>(120, 255), bgr, cvtColor); set_HSV_value(std::pair<uchar, uchar>(0, 10), std::pair<uchar, uchar>(30, 255), std::pair<uchar, uchar>(120, 255), bgr, cvtColor);
set_HSV_value(std::pair<uchar, uchar>(200, 255), std::pair<uchar, uchar>(30, 255), std::pair<uchar, uchar>(120, 255), bgr, cvtColor); set_HSV_value(std::pair<uchar, uchar>(200, 255), std::pair<uchar, uchar>(30, 255), std::pair<uchar, uchar>(120, 255), bgr, cvtColor);
break; break;
case CImageApplyHSVCorrect::LowSaturation_Removal: case CImageApplyHSVCorrect::LowSaturation_Removal:
set_HSV_value(std::pair<uchar, uchar>(0, 255), std::pair<uchar, uchar>(0, 30), std::pair<uchar, uchar>(0, 255), bgr, cvtColor); if (alpha < 0)
temp = 35;
else
temp = alpha;
set_HSV_value(std::pair<uchar, uchar>(0, 255), std::pair<uchar, uchar>(0, temp), std::pair<uchar, uchar>(0, 255), bgr, cvtColor);
break;
case CImageApplyHSVCorrect::FXB_Color_Cast:
set_HSV_value(std::pair<uchar, uchar>(45, 105), std::pair<uchar, uchar>(0, 255), std::pair<uchar, uchar>(0, 255), 0x00FFFFFF, true);
set_HSV_value(std::pair<uchar, uchar>(180, 235), std::pair<uchar, uchar>(0, 255), std::pair<uchar, uchar>(0, 255), 0x00FFFFFF, true);
set_HSV_value(std::pair<uchar, uchar>(0, 30), std::pair<uchar, uchar>(0, 50), std::pair<uchar, uchar>(0, 255), 0x00FFFFFF, true);
break;
case CImageApplyHSVCorrect::LM_Color_Cast:
set_HSV_value(std::pair<uchar, uchar>(45, 105), std::pair<uchar, uchar>(0, 255), std::pair<uchar, uchar>(0, 255), 0x00FFFFFF, true);
set_HSV_value(std::pair<uchar, uchar>(180, 235), std::pair<uchar, uchar>(0, 100), std::pair<uchar, uchar>(0, 255), 0x00FFFFFF, true);
set_HSV_value(std::pair<uchar, uchar>(0, 30), std::pair<uchar, uchar>(0, 60), std::pair<uchar, uchar>(0, 255), 0x00FFFFFF, true);
break;
case CImageApplyHSVCorrect::RESERVE_RED:
set_HSV_value(std::pair<uchar, uchar>(45, 220), std::pair<uchar, uchar>(0, 255), std::pair<uchar, uchar>(0, 255), 0x00FFFFFF, true);
break; break;
default: default:
break; break;
@ -149,7 +167,7 @@ void CImageApplyHSVCorrect::RGB_2_HSV_full(int r, int g, int b, uchar& h, uchar&
return; return;
} }
else else
s = static_cast<uchar>(delta * 255 / maxx); s = delta;
if (r == maxx) if (r == maxx)
_h = static_cast<float>(g - b) / static_cast<float>(delta); _h = static_cast<float>(g - b) / static_cast<float>(delta);

View File

@ -11,7 +11,12 @@
v1.4 2022/04/22 Deafault和LowSaturation_Removal v1.4 2022/04/22 Deafault和LowSaturation_Removal
v1.4.1 2022/04/25 访 v1.4.1 2022/04/25 访
v1.4.2 2022/06/09 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: public:
enum CorrectOption enum CorrectOption
{ {
Deafault, //默认,无任何除色效果 Default, //默认,无任何除色效果
LowSaturation_Removal, //除掉低饱和度像素 LowSaturation_Removal, //除掉低饱和度像素
Red_Removal //除掉红色。红色定义H:[0, 85][170, 255],S:[10, 255],V:[120,255] Red_Removal, //除掉红色。红色定义H:[0, 85][170, 255],S:[10, 255],V:[120,255]
FXB_Color_Cast, //风向标消除偏色
LM_Color_Cast, //鹿鸣消除偏色
RESERVE_RED //保留红色像素
}; };
public: public:
/* /*
* mode [in]: * mode [in]:
* cvtColor [in]:使使true为灰度值false为默认值 * 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(); virtual ~CImageApplyHSVCorrect();