2012-03-30 7 views
0

Ich arbeite mit einer vorhandenen Codebasis, die CVD images von einer Webcam vor der Verarbeitung erstellt. Mein Ziel ist es, Marker-Erkennung für Augmented Reality auf diesem Bild auszuführen, bevor der Rest der Verarbeitung geschieht, und ich plane, dies unter Verwendung ArUco zu tun. Das Problem ist, dass ArUco ein OpenCV-Bild aufnimmt, um die Marker zu erkennen.Konvertieren Sie ein CVD-Bild in ein Color OpenCV-Bild

Ich denke daran, dieses OpenCV-Bild manuell aus dem CVD-Bild zu erstellen, indem ich manuell auf jedes Pixel des CVD-Bildes zugreife und die RGB-Werte in ein neues OpenCV-Bild lege. Ich bin nicht sehr vertraut mit der Arbeit mit C++, aber es gibt sicherlich einen besseren Weg, dies zu tun?

Antwort

2

Ich benutze so etwas. Der Typ für myImage ist ein (benutzerdefinierter) Bildtyp, der die 3 Bytes für jedes Pixel des Bildes in aufeinanderfolgenden Speicherbytes speichert, und myImage.data() ist ein Zeiger auf den Anfang dieses Speichers. Wenn Ihr CVD-Bild (das mir nicht vertraut ist) auf ähnliche Weise angelegt ist, können Sie dasselbe tun.

cv::Mat image(rows, cols, CV_8UC3, myImage.data()); 
+1

Ja, Sie möchten auf jeden Fall das Bild ohne eine Kopie umwickeln, wenn überhaupt möglich. – aardvarkk

+0

Das hört sich genau danach an, was ich machen möchte. Laut der CVD-Bilddokumentation kann ich den Wert jedes Pixels mithilfe des Operators [] dereferenzieren, aber ich finde nicht, wie ich den Startblock für das Bild abrufen kann. Von Ihrem Code oben rate ich Zeilen = Breite des Bildes, cols = Höhe und CV_8UC3 ist das Bildformat? Gibt es eine Dokumentation für die obige Funktion, damit ich herausfinden kann, welches Bildformat anwendbar ist? – Jkh2

+1

siehe opencv.itseez.com für Dokumente, und finden Sie die Adresse des ersten Elements mit & Image [0,0]. CV_8UC3 steht für unsigned, 8 Bit (uchar ist der Standardbildtyp), 3 Kanäle (RGB). – Sam