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

标签 python arrays tensorflow machine-learning tkinter

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

    img = PhotoImage(test_images[0])
    window.create_image(20,20, image=img)

这是不成功的,但我不知道还有什么办法可以解决它。下面是我想在 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)
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()

错误消息:

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

最佳答案

解决方案如下:

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)

数据集已从tensorflow导入。 我添加了一个额外的功能来调整图像大小。 和the result looks like this

关于python - 使用 Tkinter 显示 numpy 数组中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59564720/

相关文章:

python - 如何使 Recaptcha 与 QWebView 一起使用

python - 无法在 python 中的 search_slow 和 search_fast 算法中定义某些 "needle"

python - Django - 在自定义模型函数中访问相关模型

c++ - 嵌套循环 : permuting an n-dimensional array represented by a vector

java - 在 Java 中使用字符串数组作为 Vector 的元素

javascript - 在 Javascript 中比较两个数组

python - tensorflow - TFRecordWriter 在写入文件时占用太多内存?

python - lxml - 在 findall() 中使用正则表达式按属性值查找标签

docker - 如何使用 Go SDK 将 `--gpus all` 选项传递给 Docker?

tensorflow - TensorFlow 可以缓存(子)图计算吗?