LabVIEWForum.de
IMAQ Image über globale variable - bild springt - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Module (/Forum-LabVIEW-Module)
+---- Forum: LabVIEW Vision (/Forum-LabVIEW-Vision)
+---- Thema: IMAQ Image über globale variable - bild springt (/Thread-IMAQ-Image-ueber-globale-variable-bild-springt)



IMAQ Image über globale variable - bild springt - J_B - 23.01.2011 19:27

Hallo alle zusammen,

ich habe hier ein kleines Problem: Ich lese Bilder über ein SubVI von einer uEye Kamera ein. Das funktioniert soweit auch. Die Bilder werden dann kontinuierlich an eine globale Variable übergeben. Im Hauptprogramm wird dann je nach Bedarf ein aktuelles Bild aus der globalen variable gelesen. Das Problem ist, dass das Bild im Hauptprogramm unregelmäßig "springt", sich also verschiebt und die Größe ändert. Im ursprünglichen Programm und in der globalen Variable kommt das nicht vor.

Was mache ich falsch oder kann man das Problem irgendwie umgehen?

Grüße
Jens


IMAQ Image über globale variable - bild springt - J_B - 23.01.2011 20:38

Ich konnte das Problem etwas eingrenzen: die Anzeigeprobleme treten immer dann auf wenn während der Bildaufnahme noch ein anderes VI bzw. eine parallele While Schleife läuft


IMAQ Image über globale variable - bild springt - jg - 23.01.2011 21:42

Laut Titel gibst du den Bild-Inhalt über ein IMAQ-Bild weiter.
Hier musst du aufpassen! Ein IMAQ-Bild ist "nur" eine Referenz auf einen Speicherbereich (also quasi ein Pointer). Wenn du also das Bild (eigentlich die Referenz) gerade anzeigst, wenn du in einem anderen Prozess gerade was parallel machst, dann kommt es zu den Effekten wie beschrieben.

Gruß, Jens


IMAQ Image über globale variable - bild springt - J_B - 24.01.2011 00:16

Alles klar, das war mir nicht bewusst. Wie kann ich denn am geschicktesten ein IMAQ-Bild in ein "reales" Bild umwandeln, das ich dann von einem VI zum nächsten übergeben kann?
Danke auf jeden Fall für den Tipp.


RE: IMAQ Image über globale variable - bild springt - J_B - 24.02.2011 11:36

Hat keiner eine Idee wie man das Problem umgehen könnte? Das Problem besteht immernoch, auch wenn keine VIs parallel laufen. Es tritt nur nicht mehr so häufig auf. Ich habe folgende Sachen ausprobiert, allerdings mit mäßigem Erfolg:

- Das Bild über die Zwischenablage übergeben und als Pixmap weiterverarbeiten
- Direkte Umwandlung in Pixmap

Es kann aber ja eigentlich nicht so schwer sein ein gespiegeltes Kamerabild anzeigen zu lassen...


RE: IMAQ Image über globale variable - bild springt - Panther - 24.02.2011 12:43

Ist es nicht nur ein einfacher Anzeigefehler des Displays bzw. Grafikausgabe an den Bildschirm?

Wenn ich bei mir z.B. ein Overlay erzeuge und das Bild wird nur alle 150ms aktualisiert, kann ich das overlay sehen. Wenn ich die Aktualisierung auf 10ms senke, springt bei mir das Bild (wie in deinem Fall), es ist auch kein Overlay zu sehen.

Allerdings erhalte ich korrekte Daten auf der Festplatte, trotz der Darstellungsfehler.


In dem Sinne... hoffe dir ein bisschen geholfen zu haben.


MfG


RE: IMAQ Image über globale variable - bild springt - gottfried - 26.02.2011 11:08

Hallo,

ehrlich gesagt ich habe nicht den ganzen Thread durchgearbeitet:

* wenn Du ein Bild Global speichern oder in einer Queue verschicken möchtest, musst Du es in ein Array of Numbers umwandeln, dann geht das - dann ist es ja auch keine Referenz sonder "wirkliche" Daten

* Wenn es in LV eine Bildanzeige "komisch" ausschaut, testweise einfach 200ms Wait "hinter" dem Anzeigen und die Anzeige passt (meistens). Der Grund liegt in der internen Optimierung von LV, jede fuzzy-Änderung wird am FP nicht angezeigt.

Viel Glück

Gottfried


RE: IMAQ Image über globale variable - bild springt - rolfk - 02.03.2011 10:47

LabVIEW IMAQ images sind wie schon angeben halt Referenzen auf ein Datenfeld und nicht die Daten selber. Grundsätzlich ist es daher sinnvoller, die Erfassung und Verarbeitung mit anschliessender Darstellung sequentiel zu tun. D.h. Dein seperater Loop der die Daten erfasst und in eine Global steckt ist eigentlich sehr suboptimal.

Wenn Du das Ganze stattdessen in ein VI steckst und hintereinander abarbeitest hast Du das Problem schon fast gefixt. Es kann dann noch sein dass Du für das endgültige Display mit "IMAQ Copy" eine Kopie des IMAQ Images machen musst, da ansonsten die Erfassung im Moment wo ein neues Bild eingelesen wird, das angezeigte Bild überschreibt.

Dazu ist noch zu sagen: Globals um Daten im Programm herumzureichen ist IMMER falsch. Das sieht man hier sehr gut aber macht auch mit anderen LabVIEW Datentypen keinen Sinn und verursacht oft schwer debugbare Raceconditions.

Arbeite Dich etwas ein in verschiedene Designpatterns wie das Producer-Consumer Designpattern und andere und Du wirst nie mehr im Leben zurückgehen wollen um Globals zur Datenübergabe zu verwenden.