LabVIEWForum.de
kamerabild in c-code bearbeiten - Druckversion

+- LabVIEWForum.de (https://www.labviewforum.de)
+-- Forum: LabVIEW (/Forum-LabVIEW)
+--- Forum: LabVIEW Allgemein (/Forum-LabVIEW-Allgemein)
+---- Forum: DLL & externer Code (/Forum-DLL-externer-Code)
+---- Thema: kamerabild in c-code bearbeiten (/Thread-kamerabild-in-c-code-bearbeiten)

Seiten: 1 2


kamerabild in c-code bearbeiten - billabong - 24.09.2008 14:46

hallo,
habe die aufgabe ein kleines vi zu machen, das einfach nur ein bild aufnimmt und in einer externen c datei dieses bild invertiert ( oder sonstwas) und wieder zurückgibt.. zum lernen quasi, bin noch neuling in LabVIEW.. habe eben das tutorial von hier für das einbinden von dll´s gemacht (addierer) . hat schonmal funktioniert.
nun will ich das bild in die dll/ über die dll??Smileübergeben und eben mit meinem c prog das bild bearbeiten. kann man das bild sonst direkt als array übergeben?
verstehe das bei LabVIEW nämlich noch nich genau, wie sachen übergeben werden.
nach dem grab-baustein kommt ja meine image-anzeige, nur was kommt eig aus dem grab raus? die image-anzeige, gibt mir nen bild aus( wo find ich die überhaupt?? war schon in dem beispiel drin..) und wenn ich ne string-anzeige dran haue dann bekomm ich cam0 ausgegeben (is ne firewire cam). also was kommt jetz in c an?? bzw was muss ich auswählen wenn ich mir den baustein für ext. bibliotheken konfiguriere..?

hab keine ahnung, ob ihr ansatzweise versteht was ich meine, aber ich lass es mal so stehenSmile
ansonsten erklär ich es gerne nochmal..

vielen dank soweit schon mal
andreas


kamerabild in c-code bearbeiten - billabong - 25.09.2008 16:24

bin jetzt soweit, dass ich das bild in nen array zerlegt hab und dann übergebe. hab zwar noch keine ahnung wie ich das wieder zu nem bild mache, aber najaSmile

wenn ich jetzt meine ein/ausgänge in dem knoten für ext bibs konfiguriere, kann ich wenn ich array auswähle diese sachen wählen : 1. array-datenzeiger 2. array handle 3. zeiger auf array-handle..

wenn ich das 1. wähle und mir 2 dimensionen auswähle, funktioniert das schon fast. kann dann aber nur die 1. zeile bearbeiten, LabVIEW erzeugt nämlich diesen c-code : long invert(long bild[], long ausg[]) . bekomme in LabVIEW aber wieder nen 2d array raus.

wie komme ich an die anderen zeilen?
wenn ich array-handle auswähle läuft gar nix, bekomm "__declspec(dllexport) long invert(long bild[], long ausg[]); " dann nich kompiliert..


vll kann mir ja jetz jemand helfenSmile


kamerabild in c-code bearbeiten - jg - 25.09.2008 18:35

' schrieb:bin jetzt soweit, dass ich das bild in nen array zerlegt hab und dann übergebe. hab zwar noch keine ahnung wie ich das wieder zu nem bild mache, aber najaSmile
Also zu einem IMAQ-Bild bekommst du es nicht mehr (oder nur über Tricks). Denn die Funktionen IMAQ ArrayToImage sind nur im Vision-Paket dabei. Einziger Trick, der mir einfällt: Abspeichern in der DLL als z.B. BMP und dann wieder einlesen. Du kannst ein Array aber zu einem Picture umwandeln. Dazu musst du dich mal in der Graphics&Sound Palette umschauen:
[attachment=14542]


kamerabild in c-code bearbeiten - jg - 26.09.2008 07:19

' schrieb:wenn ich das 1. wähle und mir 2 dimensionen auswähle, funktioniert das schon fast. kann dann aber nur die 1. zeile bearbeiten, LabVIEW erzeugt nämlich diesen c-code : long invert(long bild[], long ausg[]) . bekomme in LabVIEW aber wieder nen 2d array raus.

wie komme ich an die anderen zeilen?
wenn ich array-handle auswähle läuft gar nix, bekomm "__declspec(dllexport) long invert(long bild[], long ausg[]); " dann nich kompiliert..
Nachtrag zu gestern, ich hab mal in meinen Studien-Zeit-Kenntnissen von C rumgekramt:
Wär mir doch völlig egal, wenn die Definition innerhalb C nur ein 1D-Array erwartet. Schließlich wird nur der Zeiger auf das erste Array-Element übergeben, und dann folgen alle weiteren Element schön brav hintereinander im Speicher (auch bei einem 2D-Array). Somit kommst du über Zeigerarithmetik in C hervorragend an alle Elemente dran, auch wenn's in LabVIEW als 2D-Array definiert ist, also Bsp:

Array 2D in LabVIEW hat Größe (m,n). Du übergibst das als Pointer to Array, und zusätzlich die Größen m & n.

Dann kommst du in C an das Element (i,j) so dran:

Code:
*(array+i*m+j)
oder
*array[i*m+j]

Gruß, Jens

EDIT: Falls ein C-Profi feststellt, dass ich Schmarrn erzählt habe, bitte ich um Korrektur!


kamerabild in c-code bearbeiten - billabong - 29.09.2008 13:51

jau, super, hat funktioniert. vielen dank. musste dann nur noch nen pixmap erstellen und so ne komische farbpalette, die du jemand anderem schon mal erklärt hattest.. also vielen dank auch dafürSmile hätt ich sont auch nich hinbekommen, vernünftige farben wieder herzustellen, kann mit der hilfe von LabVIEW meistens absolut nix anfangen..:)danke


kamerabild in c-code bearbeiten - billabong - 01.10.2008 08:35

so, nächstes problemSmile

habe bis jetzt immer nur ein bild gemacht und es invertiert. sobald ich aber ne while schleife drum packe, sagt er mir, dass ein ausnahmefehler in meinem code aufgetreten ist.. vermutlich irgendwas mitm speicher??

in dem bild ist jetzt keine schleife drin, aber naja, denkt euch eineSmile

[attachment=14618]


kamerabild in c-code bearbeiten - jg - 01.10.2008 09:17

' schrieb:so, nächstes problemSmile

habe bis jetzt immer nur ein bild gemacht und es invertiert. sobald ich aber ne while schleife drum packe, sagt er mir, dass ein ausnahmefehler in meinem code aufgetreten ist.. vermutlich irgendwas mitm speicher??

in dem bild ist jetzt keine schleife drin, aber naja, denkt euch eineSmile

[attachment=42074:while.JPG]
Es wäre eben gerade wichtig, den Screenshot MIT For-Schleife zu sehen. Mglw. hast du nicht aufgepasst und ein AutoIndexing zugelassen.

Gruß, Jens


kamerabild in c-code bearbeiten - billabong - 01.10.2008 09:35

autoindexing?Smile

hier dann mal mit schleife, eben einfach einmal rumSmile

[attachment=14620]



achso, hab dann mal noch nen bisschen rumprobiert und einfach in den knoten der ext. bibl. noch ne weitere variable eingefügt. einfach nur nen zeiger auf wert.. da meckert der aber direkt beim kompilieren obwohl ich nur *a=*a; mache..
kann man die nicht mehr verändern oder mach ich mal wieder nur nen dummen fehler?

danke


kamerabild in c-code bearbeiten - jg - 01.10.2008 10:31

' schrieb:autoindexing?Smile

hier dann mal mit schleife, eben einfach einmal rumSmile
Wo ist jetzt ne FOR-Schleife? Ich sehe keine in deinem BD-Screenshot?

Oder meinst du in C?! Davon ist jetzt auch nichts im Screenshot zu sehen!

AutoIndexing bezieht sich auf LV.

Gruß, Jens


kamerabild in c-code bearbeiten - billabong - 01.10.2008 11:45

habe eigentlich nie was von einer for-schleife erzählt, damit hast du angefangenSmile
in dem c-code ist eine ja, der ist immer noch wie oben in dem bild.

aber das problem ist, dass wenn ich in LabVIEW die while-schleife rein mache, wie in dem 2.bild, dann kommt eben die fehlermeldung in LabVIEW, dass ein ausnahmefehler aufgetreten ist.. passiert beim 2. durchlauf.. daher der lange timeout..

hab mir mal autoindexing angeguckt. glaub nich, dass das hier das problem ist oder?

hoffe es ist jetzt klarer geworden.

hier ansonsten nochmal mit fehlermeldung

[attachment=14624]

gruß
andreas