PDA

Visualizza la versione completa : [C++] Interpretazione immagine (codice da interpretare)


Pirelli72
15-02-2010, 23:33
Sto lavorando/rivedendo un progetto sviluppato da una softwarehouse scritto in c#. Ora senza andare nei particolari questo programma riceve dei forogrammi da diverse telecamere USB ad alta risoluzione (2000 x 3000), gli elabora per trovare la larghezza di un materiale che passa sotto la telecamera. In pratica, nel fotogramma, rileva due fronti, ne calcola la distanza in pixel e ne ricava poi la misura. Ora una parte dell'elaborazione, dove viene passato il frame ed eleborato, la fa una dll scritta in C++ (di cui ho il sorgente ovviamente) ma non capisco cosa faccia esattamente.
Qualcuno me la può interpretare?



__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);
}

alka
16-02-2010, 18:23
Visto che la domanda in realtà è su C++, correggo il titolo e sposto la discussione nell'area appropriata. :fagiano:

Pirelli72
16-02-2010, 22:30
Capisco solo che effettua due cicli For..next, uno per tutti i pixel orrizzontali e uno per i pixel verticali e poi confronta il colore del pixel con una soglia (threshold)..poi??

Loading