Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!
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
23.01.2011, 20:38 (Dieser Beitrag wurde zuletzt bearbeitet: 23.01.2011 20:46 von J_B.)
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
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
Wer die erhabene Weisheit der Mathematik tadelt, nährt sich von Verwirrung. (Leonardo da Vinci)
!! BITTE !! stellt mir keine Fragen über PM, dafür ist das Forum da - andere haben vielleicht auch Interesse an der Antwort!
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
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
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.
RE: IMAQ Image über globale variable - bild springt
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.
RE: IMAQ Image über globale variable - bild springt
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.