Punkt in Bild markieren (Python?)

-AB-

R.I.P.
c-b Team
c-b Experte
#1
Hi alle,

ich brauch mal wieder eure Hilfe.

Folgender Task: Ich hab ca 27.000 png-Bilder (je 640x480), in denen ich die Mittelpunkte von Objekten markieren muss. Die Markierung würde ich gern im Alpha-Kanal ablegen, welcher vorher unbenutzt war.

Ich bräuchte ein Tool, was ich in einem Ordner aufrufen kann und welches mir dann gleich das erste .png läd und anzeigt; Oben im Tool sollten 13 Buttons sein (um den Objekttypen auszuwählen), dann klicke ich an eine Stelle im Bild, der entsprechende Pixel bekommt den Alpha-Wert des Objekttyps (eben 0 bis 13 - default 255). (Ich will nicht zeichnen, es soll nur ein Pixel markiert sein.)

Rechtsklick ist "undo", also: verwerfe Information, Enter (oder Space) ist: speichern und nächstes Bild laden. Wenn das nächste Bild geladen ist, sollte die Auswahl per Button oben nicht geändert werden, vermutlich ist es derselbe Typ wieder.

Python ist mir jetzt so eingefallen, weil ich mich damit eh schon rumplage, und die weitere Verarbeitung in Python geschieht, aber prinzipiell ist mir die Programmiersprache egal.
Problem ist nur: Da ich mit GUIs nichts am Hut habe, hab ich auch keine Ahnung, wie ich das mit dem Anzeigen, Anklicken und den Buttons lösen soll ;)

Vorschläge?
 

German

Well-Known Member
c-b Experte
#2
Oh. Ich könnte mich dazu bewegen lassen, das in WinAPI zu schreiben. Ist aber pfui, wird laaaang und ist natürlich plattformabhängig. Mit Python hab ich keine Erfahrung.
Ich überlege gerade ob das nicht sogar im Browser gehen würde. HTML5 und ein bisschen JavaScript sollten das eigentlich möglich machen. Muss mal drüber nachdenken ...
 

-AB-

R.I.P.
c-b Team
c-b Experte
#3
Ich überlege gerade ob das nicht sogar im Browser gehen würde. HTML5 und ein bisschen JavaScript sollten das eigentlich möglich machen. Muss mal drüber nachdenken ...
Das klicken definitiv, den Ordner einzulesen vermutlich weniger, und das Speichern vom fertigen Bild vermutlich nicht ;) (Soweit ich weiß, wer weiß schon, was in HTML5 alles dazu gekommen ist...)
Dafür bräuchte man AFAIK noch ne PHP-Anbindung, und dann ist das ganze schon wieder zu komplex...
 

asc

Well-Known Member
c-b Experte
#5
Lade dochmal 5-10 Bilder hier hoch und eine skizze vom UI, dann kann ich mir es mal ansehen :)
Ob es python, html5 oder c/c++ wird entscheide ich spontan hehe
 

-AB-

R.I.P.
c-b Team
c-b Experte
#7
Die Bilder sehen in etwa so aus:

20170405_124705742.png 20170405_124705842.png 20170405_124705942.png

Mini-Mockup...
minimock.png
Ist tatsächlich eher... Minimal. Aber mehr braucht das Programm halt GUI-mäßig echt nicht. Ob das im oberen Bildteil jetzt "Links" sind, Buttons oder "Radio"-Boxen, ist eigentlich egal... Intern braucht das Programm eben einen Zustand welche Option gerade gewählt ist. Im Beispiel wäre eben gerade "Bolt" gewählt worden, dann passiert ein Klick ins Bild, der Pixel an dieser Stelle bekommt einen Alpha-Wert von 7, beim Druck auf Space oder Enter wird das Bild gespeichert und das nächste angezeigt...

Hmm.... Vielleicht versuch ich mich mal an GUI und Python. (Ich hasse Python.)
 

asc

Well-Known Member
c-b Experte
#8
27.000 Bilder ist schon eine Hausnummer ... mit HTML5 wäre das schon machbar, aber nicht im echten Dateisystem, sondern in einer Sandbox.

Du kannst den Ordner in den Browser ziehen, dann werden die 27.000 Bilder ausgelesen und können nacheinander angezeigt und bearbeitet werden. Nur müsst du dann beim speichern das Bild selbst wieder (wie bei einem Download) in den richtigen Ordner schreiben lassen.

Wobei ich hier das Problem mit der hohen Anzahl sehe. Du hast dann natürlich 27.000 Bilder auf einmal (als Referenz) im Speicher bzw. im temporären Browser Dateisystem. Dazu kommt noch, dass du das Ganze nicht über file:// öffnen kannst, sondern einen Webserver (lokal oder online) benötigst.

Ein direkter Zugriff ist in diesem Fall auf jeden Fall die bessere Lösung.
 

-AB-

R.I.P.
c-b Team
c-b Experte
#9
27.000 Bilder ist schon eine Hausnummer
Wem sagst du das.... Und das ist erst der Anfang, das sind nur die Bilder mit je einem Objekt. Dann kommen noch Bilder mit A und B, A und C, A und D...... A und A und B, A und A und C, .... :/ Ich hab noch viel Arbeit vor mir. Jemand Lust, Geld zu verdienen? ;)
 

-AB-

R.I.P.
c-b Team
c-b Experte
#11
Mache gerade ziemlich gute Fortschritte in tkinter (in Python).
Bild anzeigen, check, on-click anhängen, check, jetzt nur noch die Buttons in die erste Zeile quetschen und die Laden/Speichern Logik schreiben. Aber die hab ich anderswo schon, das wird einfach nur ein Copy/Paste.
 

-AB-

R.I.P.
c-b Team
c-b Experte
#13
Bei Qt hat mich erstmal abgeschreckt dass ich die GUI im Designer erst... designen muss. (Zumindest fingen so die Tutorials an) Im Allgemeinen find ich das wünschenswert - dann ist die GUI-Beschreibung von der Funktionalität getrennt - aber am besten aus kenn ich mich noch mit Java, wo man einfach Buttons erzeugt, sie zu nem Frame added, fertig... So ähnlich ist das in tkinter auch. Python bietet sich grad an, weil ich eben wie gesagt schon Code hab um alle passenden Bilder rauszusuchen und zu speichern.
 

-AB-

R.I.P.
c-b Team
c-b Experte
#14
Sooo, 130 Zeilen später... Klappt, alles drin. ;)
Bildschirmfoto_2017-04-11_23-13-13.png

Hab dann auch noch den restlichen preprocessing-Code angepasst, morgen könnte ich anfangen, den eigentlichen processing-Code zu ändern, und dann klick ich mal irgendwann tausende Bilder an...

Bevor mich irgendjemand fragt, ob man das nicht auch automatisiert machen kann: Natürlich! Aber ich hab kein Maß, festzustellen, wie gut die automatisierte Methode wäre, und das ist überhaupt erst der Grund, warum ich das mache! ;)
 

Mat

Well-Known Member
c-b Experte
#15
Da hast du ja was vor ^^

Also wenn du es nicht automatisiert machst, kannst du zumindest den Kategorien Hotkeys zuweisen. Die Numpad-Tasten bieten sich an. Nur so eine Idee.
 
Oben