Страница 1 из 1
Добавлено: 03 авг 2004, 18:10
DeeJayC
По поводу второго сказать ничего не могу. По поводу первого:
Проверять каждую точку + делать преобразование rgb->hsv,
далее разбить на 10 отрезков и смотреть к какому отрезку пренадлежит.
Добавлено: 04 авг 2004, 11:42
DeeJayC
1.
Код: Выделить всё
void hsv2rgb(double h, double s, double v, double &r, double &g, double &b) {
int i;
double f,p,q,t;
if (s <= 0.0) { /* achromatic */
*r = v;
*g = v;
*b = v;
} else {
if (h >= 1.0) h = 0.0;
h = 6.0 * h;
i = (int)h;
f = h - (double)i;
p = v * (1 - s);
q = v * (1 - (s * f));
t = v * ( 1 - (s * (1 - f)));
switch (i) {
case 0: r = v; g = t; b = p; break;
case 1: r = q; g = v; b = p; break;
case 2: r = p; g = v; b = t; break;
case 3: r = p; g = q; b = v; break;
case 4: r = t; g = p; b = v; break;
case 5: r = v; g = p; b = q; break;
}
}
}
void rgb2hsv(double r, double g, double b, double &h, double &s, double &v) {
double rgbmin,rgbmax;
double rc,bc,gc;
double ht=0.0,st=0.0;
rgbmin = MIN(r,MIN(g,b));
rgbmax = MAX(r,MAX(g,b));
if (rgbmax > 0.0)
st = (rgbmax - rgbmin) / rgbmax;
if (st > 0.0) {
rc = (rgbmax - r) / (rgbmax - rgbmin);
gc = (rgbmax - g) / (rgbmax - rgbmin);
bc = (rgbmax - b) / (rgbmax - rgbmin);
if (r == rgbmax) ht = bc - gc;
else if (g == rgbmax) ht = 2 + rc - bc;
else if (b == rgbmax) ht = 4 + gc - rc;
ht = ht * 60.0;
if (ht < 0.0) ht += 360.0;
}
h = ht / 360.0;
v = rgbmax;
s = st;
}
2. Есть обратная задача - построение "градиента"
Код: Выделить всё
double m_Start[3];
double m_End[3];
void GetColor( rgb & color, double factor ) {
double h1, s1, v1;
double h2, s2, v2;
rgb2hsv( m_Start[0], m_Start[1], m_Start[2], h1, s1, v1 );
rgb2hsv( m_End[0], m_End[1], m_End[2], h2, s2, v2 );
double h = h1 + (h2 - h1) * factor;
double s = s1 + (s2 - s1) * factor;
double v = v1 + (v2 - v1) * factor;
hsv2rgb( h, s, v, color[0], color[1], color[2] );
};
Добавлено: 22 янв 2005, 11:52
gregor
Посоветуйте, пожалуйста, с чего начать? мне необходимо разобраться в работе программы по преобразованию растров в векторную графику.
Добавлено: 09 фев 2005, 13:29
gregor
простите, пожалуйста, дилетанта, что означают аббревиатуры RGB и HSV
Добавлено: 09 фев 2005, 15:37
DeeJayC
gregor писал(а):простите, пожалуйста, дилетанта, что означают аббревиатуры RGB и HSV
Типы спектрального разложения цвета:
RGB = Red Green Blue
HSV = Hue, Saturation, Value
Добавлено: 09 фев 2005, 15:41
DeeJayC
gregor писал(а):Посоветуйте, пожалуйста, с чего начать? мне необходимо разобраться в работе программы по преобразованию растров в векторную графику.
С линейной алгебры.
Добавлено: 03 авг 2005, 11:19
Defder
Нейронные сети рулят.
Довести бы до ума свои наработки по трингуляции растровых изображений...