Нет изображения всплывающего окна или отображения для plt.imshow () и plt.show () - PullRequest
0 голосов
/ 05 сентября 2018

Я пытался воссоздать демонстрационный скрипт cocoapi, скопировав его в свой собственный локальный скрипт вместо того, чтобы запускать его на ноутбуке Jupyter. Все работает отлично, и определенно изображение читается и может отображаться, потому что я протестировал его с помощью функции imshow () openCV (и изображение всплывает). Однако, когда я попытался открыть изображение с помощью 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 голосов
/ 05 сентября 2018

Есть два решения для этого. Первое решение любезно указано @ImportanceOfBeingErnest и заключается в переключении бэкэндов. Решение указано в этой теме

Как указал @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')

и все должно быть хорошо.

...