Не удается сохранить аннотированное изображение в matplotlib - PullRequest
0 голосов
/ 28 сентября 2018

Я прочитал все темы SO, которые смог найти по этой теме, и довольно подробно прочитал документацию, и даже скопировал и вставил код из этих вопросов / руководств.Но я все еще не могу загрузить JPG, аннотировать его и сохранить рисунок с помощью matplotlib.Я действительно мог бы воспользоваться некоторыми советами по этой теме.

Вот пример одной из моих многочисленных попыток:

import cv2
import matplotlib.pyplot as plt

image = cv2.imread(...filepath-to-img...)
fig, ax = plt.subplots()
ax.imshow(image)
ax.add_patch(plt.Rectangle(...params...)
plt.savefig(...filepath...)

Изображение загружается правильно, и когда я работаю в интерактивном режиме и запускаю plt.subplots (и команды ax.imshow (изображение), я вижу график с всплывающим изображением, и я получаю заметку о том, что это объект AxesImage.

Но когда мне нужно сохранить, он говорит«Размер рисунка 432x288 с 0 осями», и результирующее изображение, сохраненное на диск, пусто.

Я также попробовал следующее для сохранения безрезультатно.

my_fig = plt.cgf()
my_fig.savefig(...filepath...)

По сути, этокажется, что создание фигуры и осей и вызов ax.imshow () не добавляют изображение к моим осям, а также вызов ax.add_patch () ничего не делает с осями.

Я также пыталсяэто без создания отдельных осей, например:

plt.figure()
plt.imshow(image)
my_axes = plt.gca()
my_axes.add_patch(plt.Rectangle(...params...)
plt.savefig(...filepath...)

Опять же, полученная фигура пуста и имеет 0 осей.

Я знаю, что, вероятно, пропущен очевидный шаг, но я могуне понять, что это такое, и даже копирование и вставка кода не былоlp.

Редактировать: Добавление полного кода в ответ на комментарий

import cv2
from matplotlib import pyplot as plt

img = './1.png' # 364x364

image = cv2.imread(img)
fig, ax = plt.subplots()
ax.imshow(image)

color = (1, 0, 0, 1)
ax.add_patch(plt.Rectangle((139, 25), 85, 336,
    color = color,
    fill = False,
    linewidth = 2))
plt.savefig('./annotated.png')

1 Ответ

0 голосов
/ 23 января 2019

Я также столкнулся с той же проблемой, и вот что сработало для меня.

from matplotlib.patches import Rectangle
fig,ax = plt.subplots(figsize=(15,12))
ax.imshow(frames[0])
x,y,w,h = bboxes[0]
ax.add_patch(Rectangle((x,y),w,h, linewidth=3, edgecolor='r', facecolor='none'))
plt.axis('off')
plt.savefig("out.png",bbox_inches='tight',pad_inches=0)
plt.show()

Я также получал чистое изображение на диске, когда plt.show () был записан перед plt.savefig ()

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...