Python,在标签中的 Tkinter 中显示 openCv 图像

Posted

技术标签:

【中文标题】Python,在标签中的 Tkinter 中显示 openCv 图像【英文标题】:Python, Display openCv image in Tkinter in Label 【发布时间】:2017-10-14 06:20:15 【问题描述】:

我正在尝试在 Tkinter 标签中显示 openCV 图像。当我从文件加载图像时:

img = ImageTk.PhotoImage("asd.png")

everythink 工作正常。但是当我改变它时,我得到的只是空的、黑色的图像,不管怎样。这是示例代码:

import tkinter as tk
from tkinter import *

import cv2
from skimage import io
from PIL import Image, ImageTk
from skimage.color import rgb2gray


def make_label(master, x, y, w, h, img, *args, **kwargs):
   f = Frame(master, height = h, width = w)
   f.pack_propagate(0)
   f.place(x = x, y = y)
   label = Label(f, image = img, *args, **kwargs)
   label.pack(fill = BOTH, expand = 1)
   return label


if __name__ == '__main__':
   root = tk.Tk()
   frame = tk.Frame(root, width=400, height=600, background='white')
   frame.pack_propagate(0)
   frame.pack()
   image = rgb2gray(io.imread("asd.png"))

   image2 = Image.fromarray(image)
   img = ImageTk.PhotoImage(image2)
   make_label(root, 0, 0, 100, 100, img)
   root.mainloop()

请帮忙

【问题讨论】:

【参考方案1】:

我认为问题在于rgb2gray(io.imread("asd.png")) 给出的灰度值介于 0 和 1 之间,而 PIL 期望值介于 0 和 255 之间,因此Image.fromarray(image) 的结果是一个黑色方块,因为所有值都小于 1。

因此image2 = Image.fromarray(image*255) 应该给出预期的图像。

【讨论】:

以上是关于Python,在标签中的 Tkinter 中显示 openCv 图像的主要内容,如果未能解决你的问题,请参考以下文章

更新tkinter标签以在我的python GUI上一次显示一行文本文件

在 tkinter 标签 Python 中显示平方根符号

如何在python 3.4.x中的tkinter文本小部件中显示渲染的html内容

在python tkinter中调用事件时,变量不更新的标签

Python3 tkinter初级

Python中的tkinter怎么做?