0

我正在尝试使用 imshow 在 while 循环中显示图像(一个 N*P numpy 数组),但它似乎不起作用。

当我只使用没有缩进的“plt.imshow(image,cmap='gray')”时,它工作得很好。

但是,当我尝试从 while 循环中使用它时

continue=True
while continue:
    plt.imshow(image,cmap='gray')
    continue=input()

或者

i=0
while i<10:
    plt.imshow(image,cmap='gray')
    i+=1

pyplot 窗口只是冻结和 python 崩溃(与 if 相同的问题)。

我不明白为什么会这样,这里有人知道吗?非常感谢提前:)

编辑:我尝试在我的程序中这样使用它

import matplotlib.pyplot as plt
import numpy as np
import PIL.Image as im

image=np.array(im.open("Blabla.jpg").convert('L')).astype(np.float32)

plt.imshow(image,cmap='gray') #This works -> ONLY when there is not a while after

keepGoin = True #But this doesn't
while keepGoin:
    plt.imshow(image,cmap='gray')
    keepGoin=input()

编辑 2:

我犯了一个错误:似乎在使用 while//if 时 imshow 会暂停,即使 while 循环就在 imshow 之后。而当 while 循环结束时,最终会显示一个图像。也许使用这种循环只是暂停进程?

所以我尝试使用辅助函数来显示图像“out”,但它也不起作用,结果是一样的:pyplot 窗口在 while 循环期间冻结,并且图像在之后立即显示循环结束。

编辑 3:

因此,经过多次尝试,我很确定问题不是在一段时间内调用 imshow,而是循环暂停了 pyplot 的执行,即使它在循环之前被调用(如果我调用 imshow 然后使用循环, pyplot 窗口冻结直到循环结束)

根据我所做的一些新研究, plt.pause 可以帮助我,但是当我尝试这个时出现错误。

4

2 回答 2

0

以下是一些可能有助于您调试的观察结果。以下代码和语句仅适用于Python 2.x.

使用下面的代码,您必须在启动程序的控制台上键入单词TrueFalse,以使其在第一次显示后不会崩溃,因为如果您不给它任何东西,它input()会期望某种输入并抛出。EOF

import  matplotlib.pyplot as plt
import numpy as np
import PIL.Image as im

image=np.array(im.open("Blabla.jpg").convert('L')).astype(np.float32)

plt.ion()
plt.imshow(image,cmap='gray')

keepGoin = True #But this doesn't
while keepGoin:
    plt.imshow(image,cmap='gray')
    keepGoin=input()

如果您将其更改为raw_input,则在不崩溃方面更加宽容,EOF但除非您给它一些输入,否则它仍会终止。但是,将循环更改为独立于输入会为我暂停,直到我按下Enter终端。

while True:
    plt.imshow(image,cmap='gray')
    raw_input()
于 2014-04-19T10:45:43.887 回答
0

如果您使用的是 Spider,更简单的方法是配置在控制台中显示图像,因为在控制台中图像不会冻结。将蜘蛛配置为在控制台上显示图像:首选项-> python 控制台-> 图形-> 输出图形-> 此处:选择内联而不是自动

于 2020-03-16T18:36:49.950 回答