2016-10-12 3 views
0

Я создал графический интерфейс, в котором я могу загрузить изображение с диска и преобразовать движение мыши (рисование контуров) в координаты. Теперь мне нужно преобразовать координаты в двоичное изображение, и я не знаю, как это сделать. Вот мой код:преобразовать координаты в двоичное изображение 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', а, 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

Какое поведение этой программы отличается от того, что вы ожидаете? Похоже, вы отслеживаете движения мыши через привязку. Почему это не работает для вас? Что означает «Преобразование координат в двоичное изображение»? –

+0

Мне нужно преобразовать координаты в двоичную матрицу как двоичное изображение (1 0 1 1 0 0 0), так что для каждой заданной точки она помещает 1 в матрицу, 0 для остальных. –

+0

зачем вам это нужно? что вы сделаете позже с этими координатами? если нет, то сохраните его в двухмерном массиве numpy: 'matrix = np.zeros ((height, width))' и позже 'matrix [y] [x] = 1' – furas

ответ

0

Ваш вопрос в том, что вы создаете новый пустой массив в каждом событии мыши с линией a = np.zeros(shape=(h,w)) в mouseevent. Чтобы исправить это, вы должны иметь a, объявленный в __init__ как атрибут (то есть self.a = np.zeros(shape=(h,w))), чтобы вы могли получить доступ и обновить его без перезаписи в своей функции mouseevent.

+0

большое вам спасибо. –