image-colours/main_colour_extractor.cpp
2022-12-07 14:40:01 +02:00

52 lines
1.1 KiB
C++

#include "main_colour_extractor.h"
#include <math.h>
// CONSTRUCTORS
MainColourExtractor::MainColourExtractor(double lightness_threshold,
size_t h_levels, size_t s_levels, size_t v_levels)
:ColourExtractor(h_levels, s_levels, v_levels),
m_lightness_threshold(lightness_threshold)
{
}
// PRIVATE FUNCS
double MainColourExtractor::calculate_lightness(struct ColourHSV hsv) const
{
double result = 0.0;
struct ColourRGB rgb;
rgb = HSVtoRGB(hsv);
result = 0.299F * rgb.r + 0.587F * rgb.g + 0.114F * rgb.b;
return result;
}
// PROTECTED FUNCS
size_t MainColourExtractor::evaluate_colour(struct ColourHSV hsv, double weight)
const
{
size_t result = 0;
double lightness;
lightness = calculate_lightness(hsv);
if (lightness >= m_lightness_threshold)
{
result = static_cast<size_t>(round(1000.0 * (pow(weight, 0.3) +
0.009999999776482582) * hsv.v * (hsv.s + 0.1)));
}
return result;
}
// PUBLIC FUNCS
double MainColourExtractor::get_lightness_threshold() const
{
return m_lightness_threshold;
}
void MainColourExtractor::set_lightness_threshold(double value)
{
m_lightness_threshold = value;
}