#ifndef COLOUR_EXTRACTOR_H_ #define COLOUR_EXTRACTOR_H_ #include #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_