Bilder von NI Vision per Queue transportieren zu wollen, ist eine ganz dumme Idee.
Mit dem Wissen über die Datenflussgrundlagen von LabVIEW und der Ausnahme bei Vision Bildern habe ich es trotzdem bisher so gehalten.
Was daran falsch ist?
Ganz einfach, bei den Bildern werden nur Pointer weiter gereicht, nicht das eigentliche Bild. Das bleibt immer an der gleichen Speicherstelle liegen. Alles was ich also gequeuet habe war der Pointer auf diese Speicherstelle. Daraus folgt logischer Weise, dass jeder dieser Pointer in der Queue immer auf das gleich Bild gezeigt hat und damit immer auf das aktuelle. BANG.
Dafür muss man erst fast alleine kurz vor Weihnachten in der FH sitzen. Kein Plan warum mir das erst heute aufgefallen ist, dabei ist das Verhalten doch vollkommen logisch.
Die Lösung ist eigentlich einfach: man wandelt das Bild in ein Array um (gibt es ein VI für) und queuet das dann. Problem ist nur, das in Array-Wandeln und das aus-Array-zurückwandeln braucht wieder mehr Zeit und treibt jetzt den Backlog bei mehr als einer Farbe hoch. i7, ich brauche dich. Oder ich krieg die openCV-Sachen zum Laufen und kann zeigen, dass die schneller als die NI Vision VIs sind, was der Hammer wäre. Oder ich bearbeite nicht mehr Bilder sonderen die Arrays direkt, was ein Schritt gespart wäre. Mal gucken.
Fix This Sign
vor 23 Stunden
Keine Kommentare:
Kommentar veröffentlichen