在用目标检测API进行模型测试时,测试结果只有白框没有图,如下
查阅资料发现出现这种情况一般有两种原因,一是调用图片显示的语法不对,第二种是跟matplotlib的后端有关,还有一种是调用的库的模块不同导致的。
1.1 调用图片显示的语法不对
解决办法,见《TensorFlow笔记(七)——基于matplotlib.pyplot函数的图片显示与保存》
1.2 第二个原因
一般matplotlib默认的backend使用的是agg,或template,此时是无法显示图片的,agg库不支持【1】【2】
解决办法:
1. 查看当前的系统后端
>>> import matplotlib
>>>matplotlib.get_backend() #查看当前系统的后端
2. 如果是Agg,则找到matplotlibrc的路径,将backend改为Qt4Agg或其他后端。
先把自己所支持的backends打印出来看一下,
>>>import matplotlib.rcsetup as rcsetup
>>>print(rcsetup.all_backends)
['GTK3Agg', 'GTK3Cairo', 'MacOSX', 'nbAgg', 'Qt4Agg', 'Qt4Cairo', 'Qt5Agg', 'Qt5Cairo', 'TkAgg', 'TkCairo', 'WebAgg', 'WX', 'WXAgg', 'WXCairo', 'agg', 'cairo', 'pdf', 'pgf', 'ps', 'svg', 'template']
找到matplotlibrc的路径,将backend改为TkAgg或者Qt4Agg或其他后端
>>> matplotlib.matplotlib_fname()
C:\Users\Administrator\.matplotlib\matplotlibrc
保存后,重启相关的编译软件。
我按照这两个方法改了,都没用,分析可能是第三个原因
1.3 调用的库的模块问题
运行目标检测API测试图片时,会出现如下情况
plt.imshow()可以打印出来图像的数字形式,但是就是无法可视化的显示出来,这个时候有一种解决的办法如下所示:
无法显示图片可能是调用的库的中不同模块导致的问题。
解决办法【5】【6】:
matplotlib通过pyplot模块提供了一套和MATLAB类似的绘图API,将众多绘图对象所构成的复杂结构隐藏在这套API内部。此外,matplotlib还提供了一个名为pylab的模块,其中包括了许多NumPy和pyplot模块中常用的函数,方便用户快速进行计算和绘图,十分适合在IPython交互式环境中使用。这个时候此模块不行,换成另一个模块。如下:将
from matplotlib import pyplot as plt
换成:
import pylab
import matplotlib.pyplot as plt
pylab库,在最后加上
pylab.show()
结果可以显示了。
参考:
【1】matplotlib中plot.show()不显示图片的问题:从后端改
【2】使用matplotlib时pyplot.show()不显示图像的问题:从后端改
【3】python之matplotlib中plt.show()不显示图的解决办法
【4】解决matplotlib库show()方法不显示图片:从代码角度改