Seite 1 von 1

Datenaustausch zwischen unterschiedlichen Programmen

Verfasst: 22. Juni 2012 14:03
von Tuxing
Guten Tag zusammen,

ich habe das Problem, dass ich Danten (insbesondere Bilder) zwischen Programmen austauschen möchte. Es wird ein Programm A zur Ansteuerung einer Webcam, zum Laden von Videos oder Bildern geschrieben, dass mit Hilfe von OpenCV die entsprechende Quelle lädt.

Zusätzlich wird es ein Anzeigeprogramm B geben, dass die Bilder von A anzeigen soll. Folgende Ansätze habe ich versucht:
- stumpfes versenden via udp (zu langsam bei Videos mit 30 fps)
- Teilen eines SharedMemorie-Bereichs (s. http://www.qtforum.de/forum/viewtopic.php?f=1&t=14978)
Das war auch eher ein flopp, da es zu lange dauert die Bilder da immer rein zu schreiben (auch trotz JPEG kompression
mit QImageWriter)
- Abspeichern in jpg-Dateien und mit den anderen Programmen laden: Ist aber sehr unschön.

Gibt es da nicht irgendein Standardverfahren für sowas. Ich hab schon an Streaming gedacht aber ob das das mittel der Wahl ist ?!

Danke für weitere Hinweise

Re: Datenaustausch zwischen unterschiedlichen Programmen

Verfasst: 6. Juli 2012 14:47
von trendyAndy
Servus!

Ich habe das Thema jetzt erst gesehen. Ich habe mit sowas noch nicht rum gespielt, aber die SingleApplication sendet Nachrichten von Programm a nach Programm b über einen QLocalSocket/QLocalServer. Zwar sind das in dem Fall nur Strings, aber warum sollte man mit der Methode nicht auch andere Daten austauschen können.
Bist du da weiter gekommen??

Gruß
Andy

Re: Datenaustausch zwischen unterschiedlichen Programmen

Verfasst: 10. Juli 2012 17:43
von dennisDennis
Ein Farbbild mit 1204x1024 belegt im Speicher schon 4MB ( QImages sollten 32bit sein, damit sie schneller verarbeitet werden können).
4MB*30fps = 120MB/sec. Wenn man 120mb mehrmals pro Sekunde kopieren muss, könnte es langsam werden...

Am schnellsten geht es wenn man ein Array von QImages erstellt.
Die QImages werden so erzeugt, dass sie die Ausmaße und den ColorMode der IplImages haben.
Mit QImages::bits() holt man sich die Adresse für die Bildaten und lässt Opencv direkt dort rein schreiben.
Dann werden die Bilder genau 1x in den Speicher geschrieben und brauchen nicht kopiert werden.

Im Optimalfall benutzt man einen Framegrabber, der die Bilddaten dort über DMA ablegt... und keine popelige USB Webcam :mrgreen:

Re: Datenaustausch zwischen unterschiedlichen Programmen

Verfasst: 11. Juli 2012 09:54
von Tuxing
dennisDennis hat damit recht. Allerdings kann der Pointer nur innerhalb einer Anwendung verwendet werden, wenn ich mich nicht vertue. Ich kann nicht hingehen und die Adresse der Bilder an ein anderes Programm schicken, sodass dieses dann auch die Bilder zugreift. Die Programme haben ja ihre eigenen Speicherbereiche.

Ich habe es jetzt so gemacht, wie ich es hier: http://www.qtforum.de/forum/viewtopic.php?f=1&t=14978 beschrieben habe. Vielleicht hilft es euch weiter.

Grüße