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