code_device/hgdriver/ImageProcess/ImageApplyHSVCorrect.h

96 lines
3.4 KiB
C
Raw Normal View History

2022-07-29 08:41:34 +00:00
/*
* ====================================================
*
* <EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>ɫͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD>У<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>LUTʵ<EFBFBD>֣<EFBFBD>Ԥ<EFBFBD><EFBFBD>BGR<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HVS<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>BGRԭͼ<EFBFBD><EFBFBD><EFBFBD>в<EFBFBD>ֵУ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD><EFBFBD>ߣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ά
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD>2020/3/21
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>޸<EFBFBD>ʱ<EFBFBD>v1.0 2020/03/21
v1.1 2020/06/15 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>HSVȡֵ<EFBFBD><EFBFBD>Χ
v1.2 2021/08/02 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ָ<EFBFBD><EFBFBD><EFBFBD>ӦROIͼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD>ƫ<EFBFBD>ơ<EFBFBD>
v1.3 2021/08/26 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Red_Removalʵ<EFBFBD>ַ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
v1.4 2022/04/22 <EFBFBD><EFBFBD><EFBFBD>ӹ<EFBFBD><EFBFBD>ܣ<EFBFBD>֧<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ػҶ<EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ԭ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><EFBFBD><EFBFBD>أ<EFBFBD>ɾ<EFBFBD><EFBFBD>Ĭ<EFBFBD>Ϲ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>У<EFBFBD><EFBFBD>ѡ<EFBFBD><EFBFBD>Deafault<EFBFBD><EFBFBD>LowSaturation_Removal
v1.4.1 2022/04/25 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ͣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݷ<EFBFBD><EFBFBD><EFBFBD>Խ<EFBFBD>
v1.4.2 2022/06/09 <EFBFBD>޸<EFBFBD>һ<EFBFBD><EFBFBD><EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD>С<EFBFBD>Ĵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* <EFBFBD><EFBFBD>ţ<EFBFBD>v1.4.2
*
* ====================================================
*/
#ifndef IMAGE_APPLY_COLOR_CORRECT_H
#define IMAGE_APPLY_COLOR_CORRECT_H
#include "ImageApply.h"
class GIMGPROC_LIBRARY_API CImageApplyHSVCorrect : public CImageApply
{
public:
enum CorrectOption
{
Deafault, //Ĭ<>ϣ<EFBFBD><CFA3><EFBFBD><EFBFBD>κγ<CEBA>ɫЧ<C9AB><D0A7>
LowSaturation_Removal, //<2F><><EFBFBD><EFBFBD><EFBFBD>ͱ<EFBFBD><CDB1>Ͷ<EFBFBD><CDB6><EFBFBD><EFBFBD><EFBFBD>
Red_Removal //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>ɫ<EFBFBD><C9AB><EFBFBD><EFBFBD>H:[0, 85]<5D><>[170, 255],S:[10, 255],V:[120,255]
};
public:
/*
* mode [in]:Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫģʽ
* cvtColor [in]:<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD><EFBFBD>Ĭ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʹ<EFBFBD>ûҶ<EFBFBD>ֵ<EFBFBD><EFBFBD>trueΪ<EFBFBD>Ҷ<EFBFBD>ֵ<EFBFBD><EFBFBD>falseΪĬ<EFBFBD><EFBFBD>ֵ
* bgr:[in] <EFBFBD><EFBFBD>uint<EFBFBD><EFBFBD>ʾBGRֵ<EFBFBD><EFBFBD>B<EFBFBD>ڵ<EFBFBD>λ<EFBFBD><EFBFBD>R<EFBFBD>ڸ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cvtGray Ϊfalseʱ<EFBFBD><EFBFBD>Ч)
*/
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);
/*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RGB<EFBFBD><EFBFBD>R<EFBFBD>ڸ<EFBFBD>λ<EFBFBD><EFBFBD>B<EFBFBD>ڵ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>32λ<EFBFBD><EFBFBD><EFBFBD>ݽ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD>¡<EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ[0<EFBFBD><EFBFBD>0x00FFFFFF]<EFBFBD><EFBFBD><EFBFBD>ڹ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>л<EFBFBD>Ĭ<EFBFBD>ϵ<EFBFBD><EFBFBD>øú<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
*/
void initLUT();
/*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>RGB<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪĿ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>
<EFBFBD><EFBFBD><EFBFBD><EFBFBD> = src_b | (src_g << 8) | (src_r << 16)
ֵ = dst_b | (dst_g << 8) | (dst_r << 16)
* src_b:[in] ԭ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* src_g:[in] ԭ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* src_r:[in] ԭ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
* dst_b:[in] Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* dst_g:[in] Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
* dst_r:[in] Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
*/
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);
/*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HSVɫ<EFBFBD>ʿռ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫ<EFBFBD>ʷ<EFBFBD>Χ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>÷<EFBFBD>Χ<EFBFBD><EFBFBD>Ӧ<EFBFBD><EFBFBD>BGR<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ0x00FFFFFF(Ĭ<EFBFBD>ϰ<EFBFBD>ɫ<EFBFBD><EFBFBD>
* range_h:[in] H<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>ȡֵ<EFBFBD><EFBFBD>Χ[0, 255]
* range_s:[in] S<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>ȡֵ<EFBFBD><EFBFBD>Χ[0, 255]
* range_v:[in] V<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Χ<EFBFBD><EFBFBD>ȡֵ<EFBFBD><EFBFBD>Χ[0, 255]
* bgr:[in] <EFBFBD><EFBFBD>uint<EFBFBD><EFBFBD>ʾBGRֵ<EFBFBD><EFBFBD>B<EFBFBD>ڵ<EFBFBD>λ<EFBFBD><EFBFBD>R<EFBFBD>ڸ<EFBFBD>λ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>cvtGray Ϊfalseʱ<EFBFBD><EFBFBD>Ч)
* cvtGray:[in] Ϊtrueʱ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>RGBֵת<EFBFBD><EFBFBD>Ϊ<EFBFBD>Ҷ<EFBFBD>ֵ
*/
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);
/*
* <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ܣ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ⲿ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϳ<EFBFBD><EFBFBD><EFBFBD>Ϊ 256 * 256 * 256 * sizeof(uint<EFBFBD><EFBFBD>
* table:[in] <EFBFBD><EFBFBD><EFBFBD><EFBFBD>ָ<EFBFBD><EFBFBD>
*/
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