73 lines
1.7 KiB
C++
73 lines
1.7 KiB
C++
#ifndef COLOUR_EXTRACTOR_H_
|
|
#define COLOUR_EXTRACTOR_H_
|
|
|
|
#include <stdint.h>
|
|
|
|
#include "colours.h"
|
|
|
|
class ColourExtractor
|
|
{
|
|
private:
|
|
// Holds all quantized pixels
|
|
size_t* m_pixels;
|
|
|
|
// Holds the ammount of the colour that appears the most
|
|
size_t m_max_colour_count;
|
|
|
|
// Quantization levels for the HSV colours
|
|
size_t m_h_levels;
|
|
size_t m_s_levels;
|
|
size_t m_v_levels;
|
|
|
|
// Quantizes the colour
|
|
size_t quantize(struct ColourHSV hsv) const;
|
|
|
|
// Dequantizes the colour
|
|
struct ColourHSV dequantize(size_t colour) const;
|
|
|
|
protected:
|
|
// Evaluates the given colour based on its weight
|
|
virtual size_t evaluate_colour(struct ColourHSV hsv, double weight)
|
|
const = 0;
|
|
|
|
public:
|
|
// Params: HSV quantization levels
|
|
ColourExtractor(size_t h_levels = 36, size_t s_levels = 10,
|
|
size_t v_levels = 10);
|
|
|
|
void get_quantization_levels(size_t& h_levels, size_t& s_levels,
|
|
size_t& v_levels) const;
|
|
|
|
// Note: clears all pixels
|
|
void set_quantization_levels(size_t h_levels, size_t s_levels,
|
|
size_t v_levels);
|
|
|
|
size_t get_h_quantization_levels() const;
|
|
|
|
// Note: clears all pixels
|
|
void set_h_quantization_levels(size_t h_levels);
|
|
|
|
size_t get_s_quantization_levels() const;
|
|
|
|
// Note: clears all pixels
|
|
void set_s_quantization_levels(size_t s_levels);
|
|
|
|
size_t get_v_quantization_levels() const;
|
|
|
|
// Note: clears all pixels
|
|
void set_v_quantization_levels(size_t v_levels);
|
|
|
|
// Adds a pixel to be considered for extraction
|
|
void add_pixel(struct ColourHSV hsv);
|
|
|
|
// Clears all pixels
|
|
void clear_pixels();
|
|
|
|
// Extracts a single colour from all added pixels
|
|
struct ColourHSV extract_colour() const;
|
|
|
|
~ColourExtractor();
|
|
};
|
|
|
|
#endif // COLOUR_EXTRACTOR_H_
|