2016-10-12 1 views
0

Ich habe eine GUI, in der ich ein Bild von der Festplatte laden und konvertieren die Mausbewegung (Zeichnen der Konturen) in Koordinaten. Jetzt muss ich die Koordinaten in ein Binärbild umwandeln und ich weiß nicht wie. Hier ist mein Code:Konvertieren von Koordinaten in Binärbild Python

from Tkinter import * 
from tkFileDialog import askopenfilename 
from PIL import Image, ImageTk 
import numpy as np 
import cv2 

class Browse_image : 
def __init__ (self,master) : 

    frame = Frame(master) 
    frame.grid(sticky=W+E+N+S) 
    self.browse = Button(frame, text="Browse", command = lambda: browseim(self)) 
    self.browse.grid(row=13, columnspan=1) 
    self.photo = PhotoImage(file="browse.png") 
    self.label = Label(frame, image=self.photo) 
    self.label.grid(row=1,rowspan=10) 
    self.label.bind('<B1-Motion>', self.mouseevent) 
def mouseevent(self,event): 
    w=self.photo.width() 
    h=self.photo.height() 
    a = np.zeros(shape=(h,w)) 
    #print event.x, event.y 
    a[event.x,event.y]=1 

plt.imsave ('binary.png', a, cmap = cm.gray)

def browseim(self): 
    path = askopenfilename(filetypes=(("png files","*.png"),("jpeg files", 
    "*.jpeg"))) 
    if path: 
    img = Image.open(path) 
    self.photo = ImageTk.PhotoImage(img)      
    self.label.configure(image = self.photo) 
    #self.label.image = self.photo 


root= Tk() 
b= Browse_image(root) 
root.mainloop() 

`

+0

Wie unterscheidet sich das Verhalten dieses Programms von dem, was Sie erwarten? Es sieht so aus, als würden Sie Mausbewegungen über die Bindung verfolgen. Warum funktioniert das nicht für dich? Was bedeutet "Konvertiere die Koordinaten in ein Binärbild"? –

+0

Ich muss die Koordinaten in eine binäre Matrix als ein binäres Bild (1 0 1 1 0 0 0) umwandeln, so dass für jeden gegebenen Punkt eine 1 in die Matrix gesetzt wird, 0 für den Rest. –

+0

Warum brauchen Sie es? Was wirst du später mit diesen Koordinaten machen? wenn nichts, dann behalten Sie es in 2-dimensionalen numpy array: 'matrix = np.zeros ((height, width))' und später 'matrix [y] [x] = 1' – furas

Antwort

0

Ihr Problem ist, dass Sie erstellen ein neues leeres Array bei jedem Mausereignis mit der Zeile a = np.zeros(shape=(h,w)) im Mausevent. Um das zu beheben, sollten Sie a in der __init__ als ein Attribut deklariert haben (zB self.a = np.zeros(shape=(h,w))), so dass Sie darauf zugreifen und es aktualisieren können, ohne es in Ihrer mouseevent Funktion zu überschreiben.

+0

vielen dank. –

Verwandte Themen