Accesso pixel in OpenCV 2.2

Ciao, voglio usare opencv per dirmi i valori dei pixel di un’immagine bianca e vuota in modo che l’output sia simile a questo

10001 00040 11110 00100 

Ecco il mio codice corrente, ma non sono sicuro di come accedere ai risultati della chiamata CV_GET_CURRENT .. qualche aiuto?

 IplImage readpix(IplImage* m_image) { cout << "Image width : " <width << "\n"; cout << "Image height : " <height << "\n"; cout <imageData), m_image->widthStep, cvSize(m_image->width, m_image->height), 0, 0, m_image->origin); for(int y = 0; y height; ++y) // FOR EACH ROW { for(int x = 0; x width; ++x) // FOR EACH COL { CV_MOVE_TO(position, x, y, 1); unsigned char colour = *CV_GET_CURRENT(position, 1); // I want print 1 for a black pixel or 0 for a white pixel // so i want goes here } cout << " \n"; //END OF ROW } } 

In opencv 2.2, userei l’interfaccia C ++.

 cv::Mat in = /* your image goes here, assuming single-channel image with 8bits per pixel */ for(int row = 0; row < in.rows; ++row) { unsigned char* inp = in.ptr(row); for (int col = 0; col < in.cols; ++col) { if (*inp++ == 0) { std::cout << '1'; } else { std::cout << '0'; } std::cout << std::endl; } } 

La struttura di IplImage ha una variabile char* imageData – è solo un buffer di tutti i pixel. Per leggerlo correttamente devi conoscere il tuo formato di immagine. Ad esempio per i primi 10 caratteri dell’immagine RGB888 nell’array imageData rappresenteranno i valori r, g, b del primo pixel nella prima riga. Se conosci il formato dell’immagine, puoi leggere i dati correttamente. Il formato dell’immagine può essere ripristinato leggendo un altro valore della struttura IplImage:

http://opencv.willowgarage.com/documentation/basic_structures.html

Inoltre penso che sia più efficiente scrivere il ciclo in questo modo:

 uchar r,g,b; for (int y = 0; y < cvFrame->height; y++) { uchar *ptr = (uchar*) (cvFrame_->imageData + y*cvFrame_->widthStep); for (int x = 0; x < cvFrame_->width; x++) { r = ptr[3*x]; g = ptr[3*x + 1]; b = ptr[3*x + 2]; } } 

Questo codice è per l’immagine RGB888

IplImage è il vecchio formato per le immagini. Dovresti usare il nuovo formato, CvMat, che può memorizzare matrici arbitrarie. Un’immagine è solo una matrice, dopo tutto.

È quindi ansible accedere ai pixel utilizzando la funzione cvGet2D , che restituisce un CvScalar.