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>Bͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* src_g:[in] ԭ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>Gͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* src_r:[in] ԭ<EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>Rͨ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|
|
|
|
* dst_b:[in] Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>Bͨ<EFBFBD><EFBFBD>ֵ
|
|
|
|
|
* dst_g:[in] Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>Gͨ<EFBFBD><EFBFBD>ֵ
|
|
|
|
|
* dst_r:[in] Ŀ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ<EFBFBD><EFBFBD>Rͨ<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
|