首页 > 解决方案 > 将当前图像转换为黑白

问题描述

目标是将GUI窗口中的当前图像转换为黑白

下面是我的代码:

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'

标签: pythonpython-3.xlistpython-2.7

解决方案


这是工作代码,您应该可以对其进行调整以配合您的工作:

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()

推荐阅读