无法在Matplotlib中保存带注释的图像

时间:2018-09-28 18:34:03

标签: python matplotlib

我已经阅读了在该主题上可以找到的每个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(image)命令时,我看到一个弹出的图像图,并且我得到一条注释,说它是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个轴。

我知道我可能缺少一个明显的步骤,但是我无法弄清楚它是什么,甚至复制和粘贴代码也无济于事。

编辑:添加完整的代码以回应评论

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 :(得分:1)

我也遇到了同样的问题,这对我有用。

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.savefig()之前写入plt.show()时,我也在磁盘上得到空白图像