Я пытаюсь использовать PIL и Tkinter для создания собственного программного обеспечения для обработки изображений.Я хочу использовать мышь, чтобы выбрать интересующую область на изображении, захватить эти значения пикселей и передать ее в scipy / numpy для некоторого сокращения чисел и возможного PIL для дальнейшего редактирования изображения.
Пока что яиметь класс RegionOfInterest:
class RegionOfInterest:
def __init__(self,image,boundingBox):
#take bounding box, draw an oval on the image, save boundingBox locally
self.box = boundingBox
self.avgInt = 0
self.draw = ImageDraw.Draw(image)
self.draw.rectangle(boundingBox,outline='white')
def capture(self):
region_to_capture = image.crop(box)
region_to_capture.save('output.jpg')
, который принимает объект изображения PIL и boundingBox (с методом захвата для обрезки и сохранения изображения).Это вызывается функцией рисования:
def draw(event):
global image
global region
global listOfRegions
mouse_X = event.x
mouse_Y = event.y
region.append(mouse_X)
region.append(mouse_Y)
if len(region) == 4:
roi = RegionOfInterest(image,region)
listOfRegions.append(roi)
canvas.update()
roi.findPixels()
roi.calcIntensity()
region = []
, которая в свою очередь вызывается управляющим щелчком через Tkinter
mouse_X = 0
mouse_Y = 0
region = []
listOfRegions = []
image = Image.open('test.jpg')
image = image.convert('L')
imPix = image.load()
canvas = Tkinter.Canvas(window, width=image.size[0], height=image.size[1])
canvas.pack()
image_tk = ImageTk.PhotoImage(image)
canvas.create_image(image.size[0]//2, image.size[1]//2, image=image_tk)
window.bind("<Control-Button-1>", draw)
window.bind("<Control-space>", lambda e: nextFrame(sequence_object=sequence,event=e))
Tkinter.mainloop()
Моя самая большая проблема на данный момент заключается в том, что когда я рисуюпрямоугольник (еще в RegionOfIntereste. init ()), прямоугольники не отображаются!
Какой-нибудь совет, как заставить это работать?Возможно, есть какие-нибудь предложения по изучению того, как лучше взаимодействовать с tkinter / pil?