# Dateiname: Zwischen die beiden Anführungszeichenunten in der Zeile kommt # der Pfad zur Bilddatei die du bearbeiten willst, # also z.B. fn = '/Users/sds/testbild.png' fn = '/Users/hagen/Desktop/test.jpg' # das generiert das Programmobjekt, das die Segmentierung durchführt s = Slic(fn) # Jetzt der Befehl zum Segmentieren # Parameter: 1.: Anzahl der Segmente, 2.: Kanten-Sensitivität, # 3.: Seitenverhältnis der Segmente (hat nicht viel Enfluss, # würde ich immer bei 1 lassen) s.segment(300, 5, 1) # das hier zeichnet die Segmentgrenzen ein s.mark_border() # und das die Dreiecke, die Zahl in der Klammer ist die Anzahl der Dreiecke # in der Zeile unten drunter ist ein Befehl auskommentiert. Wenn du die # # löschst und die obere Zeile auskommentierst (also ne # davor setzt), # werden die Dreiecke geordnet verteilt... s.draw_triangles_random(10000) #s.draw_triangles_gridded(10000) # und zum Schluss noch Speichern. Mit der unten stehenden Einstellung # wird die Ausgabe in eine Datei mit gleichem Namen nur mit '_slic' am Ende in den # gleichen Ordner der ursprungsdatei geschrieben. # Kannst das, was in den Klammern steht auch # löschen und stattdessen nen Pfad + Dateinamen selbst reinschreiben. # (Also z.B.: s.save('/Users/deinbenutzerordner/sonstirgendweinname.jpg')) s.save()
class SlicApp(App): slic = ObjectProperty(None) img_loaded = ObjectProperty(False) img_segmented = ObjectProperty(False) title = 'Image SLIC 0.1' def open_click(self): self.root.ids.display.clear_widgets() self.root.ids.display.add_widget(LoadDialog()) def save_click(self): self.root.ids.display.clear_widgets() self.root.ids.display.add_widget(SaveDialog()) def cancel(self): self.root.ids.display.clear_widgets() if not (self.slic == None): img = Image(source=self.slic.filename) img.id = 'disp_img' self.root.ids.display.add_widget(img) self.img_loaded = True def load(self, path, selection): if not selection[0] == '': self.slic = Slic(selection[0]) self.root.ids.display.clear_widgets() img = Image(source=selection[0]) img.id = 'disp_img' self.root.ids.display.add_widget(img) self.img_loaded = True def save(self, path, filename): self.slic.save(fn=path + '/' + filename) def segment(self, num_seg, comp): if self.slic == None: print 'No image loaded.' return self.slic.reload_orig() self.t = Thread(target=self.do_seg, args=(int(num_seg), int(comp))) self.t.start() def do_seg(self, num_seg, comp): self.slic.reload_orig() self.slic.segment(int(num_seg), int(comp)) self.img_segmented = True Clock.schedule_once(self.update_canvas) @mainthread def update_canvas(self, *args): self.root.ids.display.children[0].texture.blit_buffer(pbuffer=self.slic.rgb.flatten()) self.root.ids.display.children[0].canvas.ask_update() def mark_borders(self): if self.t.is_alive(): print 'not done yet' return if self.slic == None: print 'No image loaded.' return elif self.img_segmented == False: print 'Image not segmented yet.' return self.slic.mark_border() self.root.ids.display.children[0].texture.blit_buffer(pbuffer=self.slic.rgb.flatten()) self.root.ids.display.children[0].canvas.ask_update() def make_mean(self): if self.slic == None: print 'No image loaded.' return elif self.img_segmented == False: print 'Image not segmented yet.' return self.slic.reload_orig() self.slic.make_mean() self.root.ids.display.children[0].texture.blit_buffer(pbuffer=self.slic.rgb.flatten()) self.root.ids.display.children[0].canvas.ask_update()