Exemple #1
0
# 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()
Exemple #2
0
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()