komplexere Bildanalyse

M--G

Lieutenant
Registriert
Dez. 2006
Beiträge
779
Hallo alle beisammen,
alle Pseudoprogrammierer können hier schon aufhören zu lesen ;)
Ich kann relativ gut programmieren, bin bei der Sache aber trotzdem auf Hilfe angewiesen.

Für eine Temperaturanalyse mit thermochramitschen Flüssigkristallen müssen Messbilder automatisiert ausgewertet werden.

Konkret möchte ich ein Bild der festen Auflösung X,Y jeweils von jedem Pixel die Farbwerte (RGB) auslesen. Dann lasse ich ein bischen Hokuspokus-Algorythmen drüberlaufen (die ich schon vorprogrammiert habe)....

Das ganze würde ich am liebsten mit C++ umsetzen (die Sprache kann ich (auch wenn es schon wieder 2Jahre her ist)), notfalls mit LabView.

Habt ihr eine Idee?
Grüße
Martin
 
Ich weiß zwar nicht genau, wo jetzt die Frage/Herausforderung versteckt ist, aber ich gebe dir einfach mal als Stichwort OpenCV. Das könnte hilfreich sein.
 
Was ist deine Frage ?
Welches Format hat "ein Bild" ? Was heisst "auslesen" ? Dein Bild gurkt im Speicher herum und wartet nur darauf von dir benutzt zu werden, wo genau ist das Problem ?
 
wie ich ein Feld mit den RGB Werten füttere.
Also wie kann ich in C++ ein Bild (jpg (feste Auflösung)) einlesen; also Pixel für Pixel automatisch die RGB Werte auslesen und in ein Feld schreiben?
 
also Pixel für Pixel automatisch die RGB Werte auslesen und in ein Feld schreiben?
Der Sinn von Bildverarbeitungsbibliotheken wie OpenCV / CImg / ImageJ / Vigra etc ist natürlich, dass man genau das nicht mehr machen muss sondern dies schon von der Bib erledigt wird.
Man kann dann quasi sowas machen:
myPicture(100, 200).getRed()

Hier ist der Oberartikel:
http://de.wikipedia.org/wiki/Bildverarbeitung
Und hier sind Bibliotheken:
http://www.machine-vision.eu/22-0-Bibliotheken+zur+industriellen+Bildverarbeitung.html

OpenCV ist ne sehr gute Wahl..
etwas unbekannt aber auch sehr umfangreich und C++ wäre zB http://hci.iwr.uni-heidelberg.de/vigra/
Da könnte ich dir Massenweise Beispielcode geben...
Bei OpenCV sind natürlich schon Beispiele dabei, die genau das machen was du willst.
 
Zuletzt bearbeitet:
M--G schrieb:
alle Pseudoprogrammierer können hier schon aufhören zu lesen ;)

Sorry, für OT, da hier eh schon alles gesagt wurde, was man sagen kann, aber mit deiner Äußerung würde ich vorsichtig sein. Deine Beiträge hier sprotzen auch nicht grad von Professionalität und ich würde dich auch eher als Pseudoprogrammierer einstufen.

Wer gut Programmieren kann, sollte schon in der Lage sein, erste Informationen selbst ranzuschaffen. Hättest du einmal den Begriff "JPEG" unter Wikiepedia nachgeschlagen, hättest du feststellen können, dass dieses Format nicht so trivial wie BMP oder PNM (PBM, PPM, PGM) ist und dass man dort auf Bibliotheken angewiesen ist, sofern man nicht den Ehrgeiz hat, einen eigenen Decoder zu schreiben. Schon mal JPEG nicht ein mal RGB-Werte speichert, sondern YCbCr und diese liegen in codierter Form und im Zick-Zack Muster vor, und das nicht mal Pixel für Pixel, sondern Block für Block.
 
Zuletzt bearbeitet:
Ok danke an alle :-)
Hat mir sehr geholfen!

@kuddlmuddl
Mit "myPicture(100, 200).getRed()" könnte man sicher aber auch ein Feld füttern^^
Ja ich bin ein hoffnungsloser Fall :D
Die Daten werden danach durch mehrere einfache "Algorythmen" gejagt, die neuen Informationen in andere Datenfelder geschrieben und dann noch ausgewertet....

@Whiz-zarD
Ja ich bin auch ein Pseudoprogrammierer, was ich auch offen eingestehe.
Bzw ich bin gar kein Programmierer ^^
Lange Rede kurzer Sinn, ich wollte einen Stoß in die richtige Richtung, die ich auch erhalten habe :)
Den Rest finde ich auch selbst heraus ;-)


Danke nochmal!
(mit den richtigen Suchbegriffen, ist die (google)-Suche nun viel einfacher)
 
Mit "myPicture(100, 200).getRed()" könnte man sicher aber auch ein Feld füttern^^
Das ist überflüssig, da genau das von diesen Bibliotheken ja getan wird!
Das wäre so als ob du eine existierende Methode aus einer Bibliothek benutzt um ne .txt in ein char-Array zu lesen und anschließend dieses Array nochmal in ein anderes Array rein-kopierst (=> Text liegt doppelt im Speicher).

Der Grund wieso diese Bibliotheken häufig nicht einfach Arrays (das meinst du doch mit Feldern?) verwenden ist
1) Nicht jedes Bild besteht aus 24 bis 32bit pro Pixel. (3 bis 4 mal 8 bit). Es gibt auch Bilder mit mehr als 4 Kanälen und jeweils mit mehr als 8 bit Genauigkeit.
2) Ab einer bestimmten Größe kann man in C/C++ nicht einfach ein Array anlegen - man braucht (m)alloc. Und da eben diese Grenze schon von den meisten normalen Digi-Cam Bildern überschritten wird ist es eben nicht so einfach - und genau dafür gibt es dann diese Bibliotheken die einem so nervige Fummelarbeit abnehmen

btw ist eigtl dieser ganze Thread überflüssig weil diese Links alle in deinem letzten
https://www.computerbase.de/forum/threads/rgb-in-hsv-spektrum.896302/
schon gegeben wurden... (ganz unten)
 
Zuletzt bearbeitet:
Zum Thema Installation:
Ich hab mal nach opencv getting started gegoogelt und folgende interessante Links gefunden:
http://opencv.willowgarage.com/wiki/VisualC++_VS2010

der stammt aus dem open-cv wiki von hier
http://opencv.willowgarage.com/wiki...e.2BAC8-Introduction.GettingStartedwithOpenCV

dort ist auch speziell für DevCPP ne anleitung, wobei ich mich eher an der Visual Studio Version (erster Link) orientieren würde und die neuste Version von Hand einbauen würde anstatt was veraltetes runterzuladen:
http://opencv.willowgarage.com/wiki/DevCpp

und hier nochmal in einem blog erklärt (mit hilfreichen kommentaren!)
http://opencv.blogspot.com/2006/04/getting-started-with-opencv-in-visual.html

hier noch ein ganzes buch was aber sehr langsam läd :/ zumindest die ersten 2 seiten sahen gut aus^^
http://www.scribd.com/doc/3496786/OpenCV-Installation-and-Getting-Started-Guide


Im Grunde wie immer:
Pfad der header-Files angeben UND Pfad der libs dem Linker mitgeben
 
Zuletzt bearbeitet:
Danke :)
Irgendwie bin ich zu blöd, habe mir alles durchgelesen und gegooglet aber so richtig lässt es sich in Dev C++ nicht eingeben.

Habe die nötigen Dateien dann per Hand in den include Ordner von Dev C++ gepackt.
Kann nun auch die entsprechenden Header ohne error einbinden.

Aber wenn ich die entsprechenden Funktionen nutzen will, meckert er dass die Functionen nicht definiert sind :(

Weiß einer Rat?
(p.s. ich probiere und lese nun schon seit Stunden!)
 
Wie genau heißt denn die Fehlermeldung? Wort für Wort bzw. Zeichen für Zeichen?
Hast du die Pfade der Bibliotheken dem Linker hinzugefügt?
 


Danke schonmal :-)
 
Zurück
Oben