mirror of http://192.168.1.51:8099/lmh188/twain3.0
88 lines
2.5 KiB
C
88 lines
2.5 KiB
C
|
/*
|
|||
|
* ====================================================
|
|||
|
|
|||
|
* <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/3/21
|
|||
|
v1.1 2020/6/15 <EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><EFBFBD><EFBFBD><EFBFBD>HSVȡֵ<EFBFBD><EFBFBD>Χ
|
|||
|
* <EFBFBD>汾<EFBFBD>ţ<EFBFBD>v1.1
|
|||
|
|
|||
|
* ====================================================
|
|||
|
*/
|
|||
|
|
|||
|
#ifndef IMAGE_APPLY_COLOR_CORRECT_H
|
|||
|
#define IMAGE_APPLY_COLOR_CORRECT_H
|
|||
|
|
|||
|
#include "ImageApply.h"
|
|||
|
|
|||
|
class CImageApplyHSVCorrect : public CImageApply
|
|||
|
{
|
|||
|
public:
|
|||
|
enum CorrectOption
|
|||
|
{
|
|||
|
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:
|
|||
|
|
|||
|
CImageApplyHSVCorrect();
|
|||
|
|
|||
|
/*
|
|||
|
* mode [in]:Ԥ<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɫģʽ
|
|||
|
*/
|
|||
|
CImageApplyHSVCorrect(CorrectOption mode);
|
|||
|
|
|||
|
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>λ
|
|||
|
*/
|
|||
|
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);
|
|||
|
|
|||
|
/*
|
|||
|
* <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
|