【问题标题】:How to display the image after clicking the button?单击按钮后如何显示图像?
【发布时间】:2021-11-09 14:31:32
【问题描述】:

我正在尝试制作一个将过滤器应用于图像的应用程序,但在读取 image_label_filtered=Label(image=filtered_image) 说 _tkinter.TclError: image doesn't exist 后显示异常。

from tkinter import *
import cv2
import numpy as np
from matplotlib import pyplot as plt
from PIL import ImageTk,Image

root=Tk()
root.title("image processing")
original_image=ImageTk.PhotoImage(Image.open("E:/college materials/third year first term/image processing/section/noised_image.png"))
original_image_for_filter=cv2.imread("E:/college materials/third year first term/image processing/section/noised_image.png")

image_label=Label(image=original_image)
image_label.grid(row=0,column=0)

def button_Blur(): 
    filtered_image=cv2.blur(original_image_for_filter,(5,5))
    image_label_filtered=Label(image=filtered_image)
    image_label_filtered.grid(row =0, column=1) 

button_blur=Button(root,text="apply blur filter",command=button_Blur)
button_blur.grid(row=1,column=0)
root.mainloop()

【问题讨论】:

  • filtered_image中的数据是什么类型的?是PhotoImage吗?
  • 我认为@BryanOakley 是对的。您正在从 Cv2 为过滤后的图像创建二进制数据。试试Image.fromarray(filtered_image)
  • @Danielme 它没有工作它显示另一个异常:_tkinter.TclError: image "" 不存在

标签: python tkinter


【解决方案1】:

您需要将图像转换为tkinter.PhotoImage 兼容格式,例如ImageTk.PhotoImage 才能用作Label 小部件的图像:

def button_Blur():
    image = cv2.blur(original_image_for_filter, (5,5))
    image = cv2.cvtColor(image, cv2.COLOR_BGR2RGB) # BGR to RGB
    image = Image.fromarray(image) # convert to Image format
    filtered_image = ImageTk.PhotoImage(image) # convert to PhotoImage format
    image_label_filtered = Label(image=filtered_image)
    image_label_filtered.grid(row =0, column=1)
    # keep a reference of the image to avoid garbage collected
    image_label_filtered.image = filtered_image

【讨论】:

  • 非常感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-22
  • 1970-01-01
  • 2012-04-28
  • 2021-08-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多