【发布时间】: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