plt.imshow()和plt.show()不会弹出图像或显示

时间:2018-09-05 05:54:20

标签: image matplotlib python-3.5 backend

我试图通过复制粘贴到我自己的本地脚本中而不是在Jupyter笔记本上运行它来重新创建cocoapi演示脚本。一切正常,并且肯定有图像读取并可以显示,因为我已经使用openCV的imshow()函数对其进行了测试(然后弹出了图像)。但是,当我尝试使用plt.imshow()和plt.show()打开图像时,图像不会出现。

我上网搜索解决方案,他们认为这是后端问题?但是,当我运行matplotlib.get_backend()时,它返回:'TkAgg'。

我也跑了:sudo apt-get install tcl-dev tk-dev python-tk python3-tk 没有错误也没有问题。

from __future__ import print_function
from pycocotools.coco import COCO
import os, sys, zipfile
import urllib.request
import shutil
import numpy as np
import skimage.io as io
import matplotlib.pyplot as plt
import pylab
pylab.rcParams['figure.figsize'] = (8.0, 10.0)
...
# load and display image
I = io.imread('%s/images/%s/%s'%(dataDir,dataType,img['file_name']))
plt.axis('off')
plt.imshow(I)
plt.show()

版本
  *操作系统:Ubuntu 16.04
  * Matplotlib版本:2.2.3
  * Matplotlib后端(print(matplotlib.get_backend())):TkAgg
  * Python版本:3.5.2

1 个答案:

答案 0 :(得分:2)

有两种解决方法。 第一个解决方案由@ImportanceOfBeingErnest指出,它是切换后端。解决方法是stated in this thread

正如@ImportanceOfBeingErnest指出的那样,第二种解决方案不太理想,因为它涉及更改源代码。但是,如果由于某种原因第一种方法不起作用,请随时尝试第二种方法。

第二个解决方案: 当我运行matplotlib.get_backend()时,它返回:'TkAgg',所以我很困惑为什么它仍然无法正常工作。原来它返回了“ TkAgg”,因为我在终端上做了类似的事情:

Python 3.5.2 (default, Nov 23 2017, 16:37:01)  
[GCC 5.4.0 20160609] on linux  
Type "help", "copyright", "credits" or "license" for more information.  
import matplotlib  
matplotlib.get_backend()  

但要保持一致

from pycocotools.coco import COCO

从终端:

This call to matplotlib.use() has no effect because the backend has already
been chosen; matplotlib.use() must be called *before* pylab, matplotlib.pyplot,
or matplotlib.backends is imported for the first time.

在cocoapi / PythonAPI / pycocotools / coco.py文件中,第三个导入行是:

import matplotlib; matplotlib.use('Agg')

将此更改为:

import matplotlib; matplotlib.use('TkAgg')

一切都会好起来的。