52 lines
1.1 KiB
C++
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;
|
|
}
|