Python - matplotlib.pyplot.imshow在if/while中不起作用
我正在尝试在一个循环里用imshow显示一张图片(一个N*P的numpy数组),但似乎不太成功。
当我直接用“plt.imshow(image,cmap='gray')”而不缩进时,它工作得很好。
但是,当我试着在一个循环里这样使用时:
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循环结束后,图片才会显示出来。也许使用这种循环会让进程暂停?
所以我尝试用一个辅助函数来在while循环“外部”显示图片,但也不行,结果是一样的:在while循环期间,pyplot窗口卡住,图片在循环结束后才显示。
补充3:
经过更多尝试后,我很确定问题不在于从while调用imshow,而是循环暂停了pyplot的执行,即使是在循环之前调用imshow(如果我先调用imshow再用循环,pyplot窗口会一直卡到循环结束)。
根据我最近的研究,plt.pause可能会帮我,但我尝试这个时出现了错误。
2 个回答
如果你在使用Spider这个工具,比较简单的方法是设置让它在控制台显示图片,因为在控制台里图片不会卡住。要设置Spider在控制台显示图片,你可以按照以下步骤操作:进入偏好设置 -> 选择Python控制台 -> 找到图形 -> 输出图形 -> 在这里选择“内联”而不是“自动”。
这里有一些观察结果,可能会帮助你调试。下面的代码和说明只适用于 Python 2.x
。
使用下面的代码时,你需要在启动程序的控制台中输入 True
或 False
,这样程序在第一次显示后才不会崩溃,因为 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()