Ciao a tutti avrei bisogno di un aiutino. Non so se me lo potete risolvere, io ovviamente non sono un programmatore. Espongo il problema: Ho un file di testo contenente terne RGB di immagini provenienti da macchine digitali io devo convertirle in HSL(o HSI) inserisco 2 file (.c e l'header) dove sono presenti le formule di conversione. Se potete farmi questo faore mi risolvete un problemone. Grazie per l'attenzione torno a studiare.
//conv.c
double Arrotonda(double valore)
{
double fraz,integ,round;
fraz=modf(valore,&integ);
if (fraz<=0.5) round=integ;
else round=integ+1;
return(round);
}
//------------------------------------------------------------------------------
double Normalizza(double valore)
{
double norm;
norm=valore/255;
return(norm);
}
//------------------------------------------------------------------------------
double Mio_abs(double num)
{
double abs;
if (num<0) abs=-num;
else abs=num;
return(abs);
}
//------------------------------------------------------------------------------
float Mio_min(float n,float m)
{
if (n <= m)
return(n);
else
return(m);
}
//------------------------------------------------------------------------------
void rgb2h(unsigned char **image_input, unsigned char *hImage, int H, int W)
{
double num,den1,den2,bu,nonso;
float r,g,b;
int i,j;
float temp;
for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
r = ((float) image_input[0][i*W+j]/255);
g = ((float) image_input[1][i*W+j]/255);
b = ((float) image_input[2][i*W+j]/255);
if (r == 0 && g == 0 && b == 0)
hImage[i*W+j] = 0;
else if (r == 1 && g == 1 && b == 1)
hImage[i*W+j] = 0;
else
{
num = (2*r-g-b);
den1 = pow(r-g,2);
bu = den1+((r-b)*(g-b));
nonso = Mio_abs(bu);
den2 = sqrt(nonso);
if (den2 == 0)
den2 = den2 + 0.0000001;
temp = Arrotonda(((acos(0.5*(num/den2)))/3.14)*180);
if (b > g)
hImage[i*W+j] = ((360 - temp)/360)*255;
else
hImage[i*W+j] = (temp/360)*255;
bu=0;den1=0;den2=0;num=0;nonso=0;
}
}
}
//----------------------------------------------------------------------------
void rgb2s(unsigned char **image_input, unsigned char *sImage, int H, int W)
{
float r,g,b, temp;
int i, j;
for(i=0;i<H;i++)
for(j=0;j<W;j++)
{
r = ((float) image_input[0][i*W+j]/255);
g = ((float) image_input[1][i*W+j]/255);
b = ((float) image_input[2][i*W+j]/255);
if (r == 0 && g == 0 && b == 0)
sImage[i*W+j] = 255;
else
{
temp = 1-((3/(r+g+b))*Mio_min(r,Mio_min(g,b)));
sImage[i*W+j] = (unsigned char) Arrotonda(temp*255);
}
}
}
//------------------------------------------------------------------------------
void rgb2l(unsigned char **image_input, unsigned char *lImage, int H, int W)
{
int i, j;
for(i=0; i<H; i++)
for(j=0; j<W; j++)
lImage[i*W+j] = (image_input[0][i*W+j] + image_input[1][i*W+j] + image_input[2][i*W+j]) / 3;
}
//conv.h
double Arrotonda(double valore);
double Normalizza(double valore);
double Mio_abs(double num);
float Mio_min(float n,float m);
void rgb2h(unsigned char **image_input, unsigned char *hImage, int rows, int cols);
void rgb2s(unsigned char **image_input, unsigned char *sImage, int rows, int cols);
void rgb2l(unsigned char **image_input, unsigned char *lImage, int rows, int cols);
Il file di testo è tipo:
230 14 115
123 124 211
121 223 33
.....
Grazie