PDA

Visualizza la versione completa : [C++] Elaborazione frame videocamera ad alta risoluzione


Pirelli72
29-06-2010, 16:41
Il seguente codice elabora i frame di una videocamera ad alta risoluzione.
C' qualcuno che mi spiega riga per riga il codice:



__declspec(dllexport) void pcBuildProfiles(unsigned char * pImage,int iWidth, int iHeight,int iWidthStep, int iLaserOrientation,int threshold, float * fvCentroids,float * fvWeights,int iVectorDim)
{
unsigned int *ivCentr;
unsigned int *ivWeight;
unsigned int *ivCentrRun;
unsigned int *ivWeightRun;

CleanVector(fvCentroids,iVectorDim);
CleanVector(fvWeights,iVectorDim);
ivCentr =(unsigned int *)malloc(iVectorDim*sizeof(unsigned int));
ivWeight =(unsigned int *)malloc(iVectorDim*sizeof(float));
memset(ivCentr,0,iVectorDim*sizeof(unsigned int));
memset(ivWeight,0,iVectorDim*sizeof(unsigned int));


int x;
int y;
unsigned char * pPixel;
unsigned char Pixel;

ivCentrRun=ivCentr;
ivWeightRun=ivWeight;

for (y = 0; y < iHeight; y++)
{
pPixel= pImage;
pPixel +=iWidthStep* y;
for (x = 0; x < iWidth; x++, pPixel++)
{
Pixel = *pPixel;
if (Pixel > threshold)
{
Pixel -= threshold;
*ivCentrRun += (Pixel * x);
*ivWeightRun += Pixel;
}
}
if (ivWeightRun > 0)
{
fvCentroids[y] = (float)*ivCentrRun/ *ivWeightRun;
fvWeights[y] = (float)*ivWeightRun;
}
ivCentrRun++;
ivWeightRun++;
}
}
free(ivCentr);
free(ivWeight);
}


:messner:

Pirelli72
29-06-2010, 19:34
ok per gradi:

questa una variabile di tipo 'Char'



unsigned char Pixel;


questa assegnazione ?



unsigned char * pPixel;

oregon
29-06-2010, 19:35
La prima una variabile di tipo unsigned char ...

Il secondo un puntatore ad unsigned char ...

Pirelli72
29-06-2010, 19:47
Originariamente inviato da oregon
La prima una variabile di tipo unsigned char ...


ok infatti un valore da 0 a 255 che mi identifica il colore del pixel.

Infatti ho:



if (Pixel > threshold)


in cui threshold la soglia di colore. Ma non capisco dove assegna il colore del pixel x,y alla variabile Pixel.

oregon
29-06-2010, 19:49
Qui

Pixel = *pPixel;

Pirelli72
29-06-2010, 20:08
Originariamente inviato da oregon
Qui

Pixel = *pPixel;

Non ho capito come ma fa lo stesso......
Ora qui fa questi calcoli:



if (Pixel > threshold)
{
Pixel -= threshold;
*ivCentrRun += (Pixel * y);
*ivWeightRun += Pixel;
}
}
if (ivWeightRun > 0)
{
fvCentroids[y] = (float)*ivCentrRun/ *ivWeightRun;
fvWeights[y] = (float)*ivWeightRun;


Ovvero se il colore del pixel x,y maggiore della soglia impostata allora:
-sottrae alla variabile Pixel la soglia
-aggiunge a ivCentrRun il prodotto di Pixel per la coordinata x del pixel stesso
-aggiunte a ivWeightRun il colore del pixel - la soglia

Ora qual' il senso di popolare le due matrici, con i valore sopra menzionati, in quel modo?



fvCentroids[y] = (float)*ivCentrRun/ *ivWeightRun;
fvWeights[y] = (float)*ivWeightRun;

MItaly
29-06-2010, 22:22
Originariamente inviato da Pirelli72
Non ho capito come ma fa lo stesso......
Sta semplicemente dereferenziando il puntatore in questione...


Ora qui fa questi calcoli:



if (Pixel > threshold)
{
Pixel -= threshold;
*ivCentrRun += (Pixel * y);
*ivWeightRun += Pixel;
}
}
if (ivWeightRun > 0)
{
fvCentroids[y] = (float)*ivCentrRun/ *ivWeightRun;
fvWeights[y] = (float)*ivWeightRun;


Ovvero se il colore del pixel x,y maggiore della soglia impostata allora:
-sottrae alla variabile Pixel la soglia
-aggiunge a ivCentrRun il prodotto di Pixel per la coordinata x del pixel stesso
-aggiunte a ivWeightRun il colore del pixel - la soglia

Ora qual' il senso di popolare le due matrici, con i valore sopra menzionati, in quel modo?



fvCentroids[y] = (float)*ivCentrRun/ *ivWeightRun;
fvWeights[y] = (float)*ivWeightRun;

Cos ad occhio direi che sta facendo un qualche genere di media pesata.

XWolverineX
29-06-2010, 23:15
Ci serve un stralcio di aiuto per aiutarti...che algoritmo , cosa sta facendo...

oregon
29-06-2010, 23:18
Originariamente inviato da XWolverineX
... stralcio ...

E' meglio uno "straccio" di uno "stralcio" ... :)

MItaly
29-06-2010, 23:57
Gi, col primo ci si pu anche pu anche pulire per terra. :zizi:



... ma il mocio pi comodo! :spy:

Loading