在pdb模式下输入imshow(img)时matplotlib图形不显示
有没有人遇到过在调试模式(PDB)下使用spyder时出现这个问题?在交互模式下运行得很好。
有人建议的一个解决办法是,在imshow(img)
之后使用pause(1)
,而不是show()
。
有没有更好的方法可以在调试模式下查看我的图形?如果有的话,那真是对Matlab的一个重大打击!
1 个回答
11
为了回答我自己的问题。显然这是一个bug,而且在PDB模式下,pause(1)
是唯一能让你看到绘图的办法。
另一种方法是把整个程序作为脚本运行,可以把代码剪切并粘贴到命令行里。这样就可以用show()
代替pause(1)
。这样做的好处是,你可以在图上放大查看。而使用pause(1)
时,只能在暂停期间进行放大。
举个例子:
import numpy as np
from matplotlib import pyplot as plt
import cv2
file_name = 'myimage.jpg'
img = cv2.imread(file_name)
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
edges = cv2.Canny(gray,150,100,apertureSize = 3)
#display image
plt.figure(1)
plt.imshow(edges)
plt.title('edges of image')
plt.show()
补充:
我刚发现一个不错的Python绘图工具,叫guiqwt。
它在pdb中可以使用,不像matplotlib那样。
import numpy as np
from guiqwt.pyplot import *
figure("simple plot")
subplot(1, 2, 1)
plot(x, np.tanh(x+np.sin(12*x)), "g-", label="Tanh")
legend()
subplot(1, 2, 2)
plot(x, np.sinh(x), "r:", label="SinH")
show()
你可以在python(x,y)的附带包中找到它,或者你也可以从这里下载。
补充2:
我刚发现最新发布的IDE,Pycharm对matplotlib的支持更好。你可以使用plt.imshow(img),甚至不需要使用plt.show()就能在调试模式下显示图像。