更新答题卡除红算法,解决答题卡除红会除掉绿色和橙色等颜色
This commit is contained in:
parent
cfb1431efd
commit
7de2077960
|
@ -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);
|
||||
|
|
|
@ -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, //默认,无任何除色效果
|
||||
Default, //默认,无任何除色效果
|
||||
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:
|
||||
/*
|
||||
* 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();
|
||||
|
||||
|
|
Loading…
Reference in New Issue