Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970

    [C++] Spiegazione codice.

    Il seguente codice elabora i frame di una videocamera ad alta risoluzione.
    C'è qualcuno che mi spiega riga per riga il codice:

    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);
      }
    Sbagliare è umano, perseverare è diabolico.

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    ok per gradi:

    questa è una variabile di tipo 'Char'

    codice:
    unsigned char Pixel;
    questa assegnazione ?

    codice:
    unsigned char * pPixel;
    Sbagliare è umano, perseverare è diabolico.

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    La prima è una variabile di tipo unsigned char ...

    Il secondo è un puntatore ad unsigned char ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    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:

    codice:
    if (Pixel > threshold)
    in cui threshold è la soglia di colore. Ma non capisco dove assegna il colore del pixel x,y alla variabile Pixel.
    Sbagliare è umano, perseverare è diabolico.

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Qui

    Pixel = *pPixel;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Originariamente inviato da oregon
    Qui

    Pixel = *pPixel;
    Non ho capito come ma fa lo stesso......
    Ora qui fa questi calcoli:

    codice:
     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?

    codice:
    fvCentroids[y] = (float)*ivCentrRun/ *ivWeightRun;
     fvWeights[y] = (float)*ivWeightRun;
    Sbagliare è umano, perseverare è diabolico.

  7. #7
    Originariamente inviato da Pirelli72
    Non ho capito come ma fa lo stesso......
    Sta semplicemente dereferenziando il puntatore in questione...
    Ora qui fa questi calcoli:

    codice:
     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?

    codice:
    fvCentroids[y] = (float)*ivCentrRun/ *ivWeightRun;
     fvWeights[y] = (float)*ivWeightRun;
    Così ad occhio direi che sta facendo un qualche genere di media pesata.
    Amaro C++, il gusto pieno dell'undefined behavior.

  8. #8
    Utente di HTML.it L'avatar di XWolverineX
    Registrato dal
    Aug 2005
    residenza
    Prague
    Messaggi
    2,563
    Ci serve un stralcio di aiuto per aiutarti...che algoritmo è, cosa sta facendo...
    "Se proprio devono piratare, almeno piratino il nostro." (Bill Gates)

    "Non è possibile che 2 istituzioni statali mi mettano esami nello stesso giorno." (XWolverineX)

    http://xvincentx.netsons.org/programBlog

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da XWolverineX
    ... stralcio ...
    E' meglio uno "straccio" di uno "stralcio" ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    Già, col primo ci si può anche può anche pulire per terra.



    ... ma il mocio è più comodo!
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.