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

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 <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])
{
initLUT();
uint temp;
switch (mode)
{
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);
break;
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;
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<uchar>(delta * 255 / maxx);
s = delta;
if (r == maxx)
_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.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();