code_app/modules/imgproc/ImageProcess/ImageApplyHSVCorrect.h

96 lines
3.8 KiB
C
Raw Normal View History

/*
* ====================================================
*
* LUT实现BGR查值表HVSBGR原图进行查值校正
*
* 2020/3/21
* v1.0 2020/03/21
v1.1 2020/06/15 HSV取值范围
v1.2 2021/08/02 ROI图像的内存偏移
v1.3 2021/08/26 Red_Removal实现方案
v1.4 2022/04/22 Deafault和LowSaturation_Removal
v1.4.1 2022/04/25 访
v1.4.2 2022/06/09
* v1.4.2
*
* ====================================================
*/
#ifndef IMAGE_APPLY_COLOR_CORRECT_H
#define IMAGE_APPLY_COLOR_CORRECT_H
#include "ImageApply.h"
class CImageApplyHSVCorrect : public CImageApply
{
public:
enum CorrectOption
{
Deafault, //默认,无任何除色效果
LowSaturation_Removal, //除掉低饱和度像素
Red_Removal //除掉红色。红色定义H:[0, 85][170, 255],S:[10, 255],V:[120,255]
};
public:
/*
* mode [in]:
* cvtColor [in]:使使true为灰度值false为默认值
* bgr:[in] uint表示BGR值B在低位R在高位cvtGray false时生效)
*/
CImageApplyHSVCorrect(CorrectOption mode = CorrectOption::Deafault, bool cvtColor = false, uint bgr = 0x00FFFFFF);
virtual ~CImageApplyHSVCorrect();
virtual void apply(cv::Mat& pDib, int side);
virtual void apply(std::vector<cv::Mat>& mats, bool isTwoSide);
/*
* RGBR在高位B在低位32
[00x00FFFFFF]
*/
void initLUT();
/*
* RGB索引值设置为目标值
= src_b | (src_g << 8) | (src_r << 16)
= dst_b | (dst_g << 8) | (dst_r << 16)
* src_b:[in] B通道索引
* src_g:[in] G通道索引
* src_r:[in] R通道索引
* dst_b:[in] B通道值
* dst_g:[in] G通道值
* dst_r:[in] R通道值
*/
void set_single(const uint src_b, const uint src_g, const uint src_r,
const uint dst_b, const uint dst_g, const uint dst_r);
/*
* HSV色彩空间描述色彩范围BGR索引设置为0x00FFFFFF(
* range_h:[in] H分量范围[0, 255]
* range_s:[in] S分量范围[0, 255]
* range_v:[in] V分量范围[0, 255]
* bgr:[in] uint表示BGR值B在低位R在高位cvtGray false时生效)
* cvtGray:[in] true时RGB值转换为灰度值
*/
void set_HSV_value(const std::pair<uchar, uchar>& range_h,
const std::pair<uchar, uchar>& range_s,
const std::pair<uchar, uchar>& range_v,
uint bgr = 0x00FFFFFF, bool cvtGray = false);
/*
* 256 * 256 * 256 * sizeof(uint
* table:[in]
*/
void set_table(const uint* table);
private:
static bool contained(uchar value, const std::pair<uchar, uchar>& range);
static void RGB_2_HSV_full(int r, int g, int b, uchar& h, uchar& s, uchar& v);
private:
uint* m_table;
};
#endif