image-colours/colour_extractor.h
2022-11-23 18:03:01 +02:00

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_