2012-11-06 15 views
5

Ich bin fast da, aber ich kann nicht ganz verstehen, wieunsigned char ** OpenCV Matte

unsigned char ** to a cv::Mat 

konvertieren Ich weiß, dass das .data Teil eines cv :: Mat uchar * ist

ich verwende eine Funktion, die in der Form zurückkehrt und Bild ...

unsigned char ** output; 

Aber der Rest von meinem Code verwendet cv :: Mat. Ich habe nicht die Quelle für die Lib, die ich benutze, also weiß nicht wirklich, was es tut.

bearbeiten Vielen Dank für die Hilfe Jungs, ich habe diese ...

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, *output); 
imshow("this is a test",TempMat); 
getan

aber das Bild schwarz ist so out Ich muss jetzt feststellen, ob es etwas gibt tatsächlich ist oder nicht.

Entschuldigung für Mangel an Forschung Ich bin auf einer engen Frist, nein, es ist keine Hausaufgaben, versuchen, etwas bereit zu bekommen, Ergebnisse zu einem Professor zu zeigen!

+2

Kennen Sie die Breite und Höhe des Doppelzeiger Sie zurückkehren, werden? – sgarizvi

Antwort

8

Sie haben Mat constructor mit einem Zeiger auf Daten verwenden:

// constructor for matrix headers pointing to user-allocated data 
    Mat(int _rows, int _cols, int _type, void* _data, size_t _step=AUTO_STEP); 
    Mat(Size _size, int _type, void* _data, size_t _step=AUTO_STEP); 

Sie haben void** zu void* konvertieren und danach verwenden.

+0

Danke, ich habe es versucht. Siehe Bearbeiten für das nächste Problem – Oliver9523

+1

@ Oliver9523 Wie ist das Format der Eingabedaten ('void **')? Wenn es sich um einen Zeiger auf ein zweidimensionales Array von Bilddaten handelt, sollten Sie es in eindimensionale Daten konvertieren. – ArtemStorozhuk

+0

Ich nehme an, es ist ein 2D-Array, danke. Ich werde es mir ansehen. – Oliver9523

0

vielleicht sollten Sie * bei

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, *output); 

entfernen machen es wie folgt aus:

cv::Mat TempMat = cv::Mat(h, w, CV_8UC1, output);