2017-05-08 8 views
0

Ich nehme RGB-Daten von meiner Kinect und versuche, es in eine OpenCV-Matrix zu setzen. Die Daten werden in „src“ gehalten:imshow() produziert seltsame Ergebnisse mit OpenCV 3.2 in C++

Mat matrixImageRGBA(w, h, CV_8UC4); 
memcpy(matrixImageRGBA.data, src, sizeof(byte) * w * h * 4); 

Allerdings, wenn ich „imshow“, um das Bild zu sehen, ist es vier Mal horizontal gefliest. Ich verwende folgenden Befehl:

imshow("Window", matrixImageRGBA); 
waitKey(500); 

Hat jemand eine Idee von dem, was das Problem hier sein kann? Es macht mich verrückt.

Danke!

+0

Wie erhalten Sie die Kinect-Daten? Es klingt, als wäre es nicht in dem Format, das Sie angegeben haben. – molbdnilo

+0

w und h sind in der Mat-Konstruktor in der falschen Reihenfolge, wenn w Breite und h ist Höhe. Weitere Informationen finden Sie unter http://stackoverflow.com/questions/25642532/opencv-pointx-y-represent-column-row-or-row-column/25644503#25644503. – Micka

Antwort

3

Sie haben w und h rückwärts. Nach der Dokumentation nimmt der Konstruktor die height als erstes Argument:

Mat (int rows, int cols, int type)  

Auch würde ich empfehlen dieses Konstruktor:

Mat(int rows, int cols, int type, void *data, size_t step=AUTO_STEP) 

anstelle des Kopierens auf das data Feld (da Sie verwenden keine Padding am Ende jeder Zeile verwenden Sie die Standardeinstellung AUTO_STEP für step).

Verwandte Themen