python - 仅在一个窗口中显示更新图像

标签 python image window neural-network updating

我想在每秒更新多次的窗口中显示一个 jpg。 我编写了一个非常非常紧凑的程序,只有 100 行代码(一个创建图像的神经网络)并且不想再添加 100 行代码来显示图像。 我能做些什么来解决这个问题吗?

非常感谢,jj

最佳答案

正如评论中所述,IO 不是问题,我们将直接使用 matplotlib 中使用的可用标准图像绘图工具,因为它是 python 事实上的标准绘图库。虽然不知道源自神经网络的典型图像的尺寸,但可以快速比较调用 e.g. 所需的平均时间。 imshowpcolormeshmatshow 对于不同的图像尺寸不会造成伤害(pcolor 明显较慢,因此被省略)。

import matplotlib.pyplot as plt
import numpy as np
import timeit

n = 13
repeats = 20
timetable = np.zeros((4, n-1))
labellist = ['imshow', 'matshow', 'pcolormesh']

for i in range(1, n):
    image = np.random.rand(2**i, 2**i)
    print('image size:', 2**i)
    timetable[0, i - 1] = 2**i

    timetable[1, i - 1] = timeit.timeit("plt.imshow(image)", setup="from __main__ import plt, image", number=repeats)/repeats
    plt.close('all')
    timetable[2, i - 1] = timeit.timeit("plt.matshow(image)", setup="from __main__ import plt, image", number=repeats)/repeats
    plt.close('all')
    timetable[3, i - 1] = timeit.timeit("plt.pcolormesh(image)", setup="from __main__ import plt, image", number=repeats)/repeats
    plt.close('all')

for i in range(1, 4):
    plt.semilogy(timetable[0, :], timetable[i, :], label=labellist[i - 1])
    plt.legend()
    plt.xlabel('image size')
    plt.ylabel('avg. exec. time [s]')
    plt.ylim(1e-3, 1)

plt.show()

enter image description here

所以,imshow 是。在 matplotlib 中更新或动画绘图的一种优雅方式是它提供的动画框架。这样一来,人们就不必像所要求的那样为许多代码行而烦恼。这是一个简单的例子:

import matplotlib.pyplot as plt
import numpy as np
import time
from matplotlib import animation

data = np.random.rand(128, 128)

fig = plt.figure()
ax = fig.add_subplot(1,1,1)

im = ax.imshow(data, animated=True)

def update_image(i):
    data = np.random.rand(128, 128)
    im.set_array(data)
    # time.sleep(.5)
    # plt.pause(0.5)
ani = animation.FuncAnimation(fig, update_image, interval=0)

plt.show()

在此示例中,神经网络将从更新函数中调用。 time.sleep 可以模拟繁重计算工作下的更新行为。如果您的应用程序是多线程的,plt.pause 可能会派上用场,让其他线程有时间完成他们的工作。 interval=0 基本上使情节更新尽可能频繁。

我希望这能为您指明大体方向并对您有所帮助。如果您不想使用动画,则需要手动处理 Canvas 清除和/或 blitting。

关于python - 仅在一个窗口中显示更新图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42766341/

相关文章:

python - python中如何定义动态二维数组?

python - Python 中 scipy.optimize.curve_fit 的数值精度

python - 有没有办法使用 qpython 播放声音?

html - z-index 设置为最高但仍然显示在下方

python - SGDRegressor() 不断地不提高验证性能

java - 实现拖放到图像查看器中

python - 在 matplotlib 中反转 imshow 显示的图像

python - 使用Python在Windows中抓取和设置窗口大小

objective-c - Cocoa 中的厚标题栏窗口,类似于 iTunes

javascript - 是否可以在带有 HTML5 的 Windows 应用商店应用程序中使用 .net(C#) 编译的 dll?