#python #python-3.x #list #python-2.7
#питон #python-3.x #Список #python-2.7 #python
Вопрос:
Цель состоит в том, чтобы преобразовать текущее изображение в окне графического интерфейса в черно-белое
Ниже приведен мой код:
def BlackAndWhite(self):
from images import Image
LoadAFile = self.inputText.getText()
CurrentImage = open(LoadAFile)
image = self.image = PhotoImage(file = LoadAFile)
image.draw()
BlackAndWhite(image)
image.draw()
self.imageLabel["image"] = self.image
blackPixel = (0,0,0)
whitePixel = (255,255,255)
for y in range(image.getHeight()):
for x in range(image.getWidth()):
(r,g,b) = image.getPixel(x,y)
average = (r b g) /3
if average < 128:
image.setPixel(x,y,blackPixel)
else:
image.setPixel(x,y, whitePixel)
Я получаю это сообщение об ошибке:
image.draw()
AttributeError: 'PhotoImage' object has no attribute 'draw'
Комментарии:
1.
PhotoImage
является подклассомImage
, и ни один из них не имеет.draw()
метода, отсюда и ошибка. Чего я не понимаю, так это того, что вы хотели сделать, вызвав этот метод в первую очередь. Может быть, вы ищете.place(x, y)
?2. Я не знаю другого способа преобразовать изображение в черно-белое
Ответ №1:
Вот рабочий код, вы должны иметь возможность настроить его для работы с вашей работой:
from tkinter import Tk, Canvas, NW
from PIL import ImageTk, Image
root = Tk()
canvas = Canvas(root, width=1000, height=1000)
canvas.pack()
img = Image.open("PATH_TO_AN_IMAGE")
blackPixel = (0, 0, 0)
whitePixel = (255, 255, 255)
for y in range(img.height):
for x in range(img.width):
pixelVal = img.getpixel((x, y))
# Unpacking in this way in case the pixel contains more than R, G, B (ex: a png)
r, g, b = pixelVal[0:3]
average = (r b g) / 3
if average < 128:
img.putpixel((x, y), blackPixel)
else:
img.putpixel((x, y), whitePixel)
photoimage = ImageTk.PhotoImage(img)
canvas.create_image((20, 20), anchor=NW, image=photoimage, state="normal")
root.mainloop()