使用 tkinter 和 Pillow 显示图像
Display an image with tkinter and Pillow
这是我的代码
import tkinter as tk
import cv2
import PIL.Image, PIL.ImageTk
window = tk .Tk()
img = cv2.imread('bee1.jpg')
height, width, no_channels = img.shape
canvas = tk.Canvas(window, width = width, height = height)
canvas.pack()
photo = PIL.ImageTk(0,0,image=photo,anchor=tk.NW)
window.mainloop()
我 运行 Pycharm 2019.3,Ubuntu(最新)
我收到这个错误:
ImportError: cannot import name '_imaging' from 'PIL' (/usr/lib/python3/dist-packages/PIL/__init__.py)
我要加载的图像是:
enter image description here
您的代码中有几处错误:
您需要使用 from PIL import Image
导入 PIL 否则您将得到您所看到的错误,
你真的不应该在这里使用 OpenCV 来读取图像,原因有两个……首先,无论如何它都在下面使用 PIL,所以你添加了不必要的依赖,其次,因为 OpenCV 使用 BGR 顺序而不是比 RGB 所以一切都是从后到前,除非你改变它,这意味着你也可以首先使用 PIL 来读取图像。
无论如何,我已经够洋洋得意了,这里有一些工作代码:
#!/usr/bin/env python3
import tkinter as tk
from PIL import Image, ImageTk
window = tk.Tk()
img = Image.open('bee.jpg')
width, height = img.size
canvas = tk.Canvas(window, width = width, height = height)
canvas.pack()
photo = ImageTk.PhotoImage(img)
canvas.create_image(width//2, height//2, image=photo)
window.mainloop()
这是我的代码
import tkinter as tk
import cv2
import PIL.Image, PIL.ImageTk
window = tk .Tk()
img = cv2.imread('bee1.jpg')
height, width, no_channels = img.shape
canvas = tk.Canvas(window, width = width, height = height)
canvas.pack()
photo = PIL.ImageTk(0,0,image=photo,anchor=tk.NW)
window.mainloop()
我 运行 Pycharm 2019.3,Ubuntu(最新)
我收到这个错误:
ImportError: cannot import name '_imaging' from 'PIL' (/usr/lib/python3/dist-packages/PIL/__init__.py)
我要加载的图像是:
enter image description here
您的代码中有几处错误:
您需要使用
from PIL import Image
导入 PIL 否则您将得到您所看到的错误,你真的不应该在这里使用 OpenCV 来读取图像,原因有两个……首先,无论如何它都在下面使用 PIL,所以你添加了不必要的依赖,其次,因为 OpenCV 使用 BGR 顺序而不是比 RGB 所以一切都是从后到前,除非你改变它,这意味着你也可以首先使用 PIL 来读取图像。
无论如何,我已经够洋洋得意了,这里有一些工作代码:
#!/usr/bin/env python3
import tkinter as tk
from PIL import Image, ImageTk
window = tk.Tk()
img = Image.open('bee.jpg')
width, height = img.size
canvas = tk.Canvas(window, width = width, height = height)
canvas.pack()
photo = ImageTk.PhotoImage(img)
canvas.create_image(width//2, height//2, image=photo)
window.mainloop()