2013-06-25 21 views
16

Ho appena iniziato ad imparare OpenCV con "Learning OpenCV Computer Vision con la libreria OpenCV".Spiegazione di IplImage * img

Nel primo esempio che dimostra come visualizzare una foto, ha una linea

IplImage* img = cvLoadImage("name.type") 

Anche se il libro lo spiega, io ancora non pienamente so cosa esattamente IplImage* img fa.

cvLoadImage carica l'immagine su img a cui sta puntando IplImage? Qualcuno può spiegarmi questo per favore? Grazie

+4

Se stai appena iniziando a imparare OpenCV, I ** consiglia vivamente di utilizzare l'API C++. L'API C (incluso 'IplImage') è deprecata (per non dire più difficile da usare). Potresti invece voler iniziare alle [esercitazioni] di OpenCV (http://docs.opencv.org/doc/tutorials/tutorials.html). – Aurelius

risposta

25
  • img è il nome della variabile, potrebbe anche essere blahblahblah;

  • IplImage è il tipo di variabile, è solo un struct che contiene i dati di immagine stessa più alcune informazioni (dimensioni, profondità di colore, ecc) sull'immagine;

    typedef struct _IplImage { 
    int     nSize; 
    int     ID; 
    int     nChannels; 
    int     alphaChannel; 
    int     depth; 
    char     colorModel[4]; 
    char     channelSeq[4]; 
    int     dataOrder; 
    int     origin; 
    int     align; 
    int     width; 
    int     height; 
    struct _IplROI*  roi; 
    struct _IplImage* maskROI; 
    void*    imageId; 
    struct _IplTileInfo* tileInfo; 
    int     imageSize; 
    char*    imageData; 
    int     widthStep; 
    int     BorderMode[4]; 
    int     BorderConst[4]; 
    char*    imageDataOrigin; 
    } IplImage; 
    

Per maggiori informazioni su IplImage: Other question about IplImage

  • cvLoadImage fornisce un puntatore ad un IplImage, il che significa che crea un IplImage quando lo carica e lo restituisce si è messa in posto.

Non dimenticare di fare cvReleaseImage(&img) al termine, se non si desidera avere perdite di memoria.

+0

Quindi IplImage è una struttura dati che memorizza informazioni sulla variabile "img"? Se non ti dispiace, vorrei fare qualche altra domanda mentre sei qui ... Perché è necessario un puntatore per IplImage? Cosa significa quando dice "Viene restituito un puntatore a una struttura di dati dell'immagine allocata"? Grazie – user2521723

+0

C'è un dato di immagine e un puntatore a che viene creato con chiamata 'IplImage * img = cvLoadImage (" name.type ")'. Il motivo per cui lo si dichiara come tale è che tutti i metodi cv ... accettano e restituiscono i puntatori di immagini. Il libro da cui stai imparando si basa sulla vecchia API openCV, che è scritta su C. Ora l'ultima versione stabile di openCV 2.4.5 utilizza l'API C++, dove non sono necessari puntatori. Insieme al libro date un'occhiata alla documentazione di opencv 2.4.5 e imparate facilmente con ottimi tutorial lì. In API C++ 'Mat image = imload (" ");' dichiarazione è senza puntatore, ei metodi richiedono dati, non il puntatore. – baci