Изображение не очищается при сохранении с холста Tkinter - PullRequest
0 голосов
/ 06 мая 2020

Я делаю рукописный интерпретатор di git с помощью Tkinter, используя созданную мной модель. Я сохраняю изображение холста, затем просматриваю его через свою модель, чтобы получить прогноз. Я очищаю холст с помощью cv.delete ("all"), затем рисую еще один di git для предсказания и получаю шаткое предсказание.

Исходный результат: (3 равно 3:) !!!) Picture of it working

Затем я очищаю его и записываю другое число: Picture of it not working

И я go в свою папку, где сохраняется изображение, и картинка выглядит так: Picture of the 4 and 3 on top of eachother all weird

Вот мой код для определения моего холста и изображения, на котором я собираюсь рисовать.

# define the canvas and image to save
lastx, lasty = None, None

cv = Canvas(root, width=420, height=420, bg='black')
image1 = PIL.Image.new("L",(420,420),"black")
draw = ImageDraw.Draw(image1)

cv.bind('<1>', activate_paint)
cv.pack(expand=YES, fill=BOTH)

Вот код, который я использовал для рисования:

 def activate_paint(e):
    global lastx, lasty
    cv.bind('<B1-Motion>', paint)
    lastx, lasty = e.x, e.y

def paint(e):
    global lastx, lasty
    x, y = e.x, e.y
    cv.create_line((lastx, lasty, x, y), fill = 'white',width=30)
    #  --- PIL
    draw.line((lastx, lasty, x, y), fill='white', width=30)
    lastx, lasty = x, y

А вот код, который я использую для его сохранения, когда нажимаю кнопку прогнозирования:

filename = f'img_to_predict.png'
image1.save(filename)

Мне просто нужна кнопка очистки, чтобы сделать изображение действительно пустым, чтобы оно не сохранялось поверх предыдущего изображения. Может ли кто-нибудь пу sh меня в правильном направлении?

Спасибо!

Джексон

Ответы [ 2 ]

1 голос
/ 06 мая 2020

Вам также необходимо очистить изображение, позвонив по номеру

draw.rectangle((0, 0, 420, 420), fill="black")

Однако я предлагаю удалить рисунок на изображении. Просто рисуйте на холсте, а затем сделайте снимок на холсте, используя ImageGrab.grab() (также из модуля Pillow), и сохраните снимок в файл, когда вам нужно сделать прогноз:

# get the canvas bounding box on screen
x, y = cv.winfo_rootx(), cv.winfo_rooty()
w, h = cv.winfo_width(), cv.winfo_height()
# take a snapshot on the canvas and save the image to file
ImageGrab.grab((x, y, x+w, y+h)).save('img_to_predict.png')
0 голосов
/ 06 мая 2020

ОБНОВЛЕНИЕ: Кажется, это вообще не имеет значения, поэтому, пожалуйста, не обращайте на это внимания.

Предполагая, что вы скопировали вставленную строку cv.delete("all"), проблема может заключаться в использовании «все» в качестве строки. Вам может понадобиться cv.delete(ALL), чтобы убрать его?

...