【问题标题】:Cannot save annotated image in matplotlib无法在 matplotlib 中保存带注释的图像
【发布时间】:2018-09-28 18:34:02
【问题描述】:

我已经阅读了我能找到的关于这个主题的每一个 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')

【问题讨论】:

  • 除非加载或显示图像产生错误,否则代码本身看起来很好,并且问题可能与您运行此代码的如何有关,其中目前我们没有任何信息。
  • 公平。将复制完整的代码块。
  • 另外,是的,图片确实可以正常加载。我可以用 cv2.imshow() 显示它,正如我在帖子中提到的,当运行 ax.imshow(image) 行时,图片确实显示为输出。
  • 抱歉,可能不太清楚。我所说的“如何你运行代码”的意思是你可以知道你在哪里输入代码,你做了什么来执行它,以及哪些程序和库(包括它们各自的版本)在使用。
  • 啊。我懂了。 Python 3.6.5、OpenCV 3.4.1、matplotlib 2.2.2。我通常使用 iPython/Jupyter 从 Atom/Hydrogen 工作并以交互方式运行代码。当我逐行运行或一次运行整个脚本时,我会得到相同的行为。当我在 Spyder 中运行时也会发生同样的情况。

标签: python matplotlib


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

【讨论】:

  • 我已经找了好几个小时了。谢谢你:)
猜你喜欢
  • 1970-01-01
  • 2015-07-06
  • 1970-01-01
  • 2013-07-26
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
相关资源
最近更新 更多