使用 Tkinter 显示 numpy 数组中的图像

Ben*_*sey 2 python arrays tkinter machine-learning tensorflow

我对 Python 缺乏经验,第一次使用 Tkinter 制作一个 UI,显示我的数字分类程序与 mnist 数据集的结果。当图像来自 numpy 数组而不是我的 PC 上的文件路径时,我有一个关于在 Tkinter 中显示图像的问题。我为此尝试过的当前代码是:

    img = PhotoImage(test_images[0])
    window.create_image(20,20, image=img)
Run Code Online (Sandbox Code Playgroud)

这是不成功的,但我不知道还有什么办法可以解决它。下面是我想在 UI 中显示的从数组绘制的图像的图片,图像下面只是显示我如何加载和绘制图像的代码,以防有帮助。抱歉,如果这是我缺少的一个简单修复,我对此很陌生。干杯

https://i.gyazo.com/8962f16b4562c0c15c4ff79108656087.png

# Load the data set
train_images = mnist.train_images() #training data
train_labels = mnist.train_labels() #training labels
test_images = mnist.test_images() # training training images
test_labels = mnist.test_labels()# training data labels

# normalise the pixel values of the images to make the network easier to train
train_images = (train_images/255) - 0.5
test_images = (test_images/255) - 0.5
# Flatten the images in to a 784 dimensional vector to pass into the neural network
train_images = train_images.reshape((-1, 784))
test_images = test_images.reshape((-1, 784))
# Print shape of images
print(train_images.shape) # 60,000 rows and 784 columns
print(test_images.shape)
Run Code Online (Sandbox Code Playgroud)
for i in range(0,15):
    first_image = test_images[i]
    first_image = np.array(first_image, dtype='float')
    pixels = first_image.reshape((28,28))
    plt.imshow(pixels)
    plt.show()
Run Code Online (Sandbox Code Playgroud)

错误信息:

Traceback (most recent call last):
  File "C:/Users/Ben/Desktop/Python Projects/newdigitclassifier/classifier.py", line 122, in <module>
    img = PhotoImage(test_images[0])
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 3545, in __init__
    Image.__init__(self, 'photo', name, cnf, master, **kw)
  File "C:\Users\Ben\AppData\Local\Programs\Python\Python36\lib\tkinter\__init__.py", line 3491, in __init__
    if not name:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
Run Code Online (Sandbox Code Playgroud)

Tan*_*moy 5

这是解决方案:

import cv2
import tkinter as tk
from PIL import Image, ImageTk
import tensorflow as tf

# initializing window and image properties
HEIGHT = 200
WIDTH = 200
IMAGE_HEIGHT = 200
IMAGE_WIDTH = 200

# loading mnist dataset
mnist = tf.keras.datasets.mnist
(x_train, y_train),(x_test, y_test) = mnist.load_data()

def imageShow(index):
    root = tk.Tk()
    # resizing image into larger image
    img_array = cv2.resize(x_train[index], (IMAGE_HEIGHT,IMAGE_WIDTH), interpolation = cv2.INTER_AREA)
    img =  ImageTk.PhotoImage(image=Image.fromarray(img_array))
    canvas = tk.Canvas(root,width=WIDTH,height=HEIGHT)
    canvas.pack()
    canvas.create_image(IMAGE_HEIGHT/2,IMAGE_WIDTH/2, image=img)
    root.mainloop()

imageShow(5)
Run Code Online (Sandbox Code Playgroud)

数据集已从张量流导入。我添加了一个额外的功能来调整图像大小。结果看起来像这样