【问题标题】:How to plot graph on an image using matplotlib in python?如何在 python 中使用 matplotlib 在图像上绘制图形?
【发布时间】:2019-05-03 07:09:18
【问题描述】:

我已将 tensorflow 对象检测 API 与 OpenCv 集成以跟踪框架内的人,以便 python 脚本可以绘制图表,显示人进入和退出框架的位置以及它在框架内移动的位置。

要绘制图形,我使用matplotlib。我有 x y 坐标,图表显示得非常好。现在我需要在该图的背景中放置一个图像。为此,我在下面做了:

image = mpimg.imread(file)
plt.imshow(image)
plt.plot(x, y)
plt.plot(x[0], y[0], 'og')
plt.plot(x[-1], y[-1], 'ob')
plt.show()

在上面的代码中,我正在读取作为图像的文件,然后将其显示在图表上。这样做会使我的最终图表看起来不好看,因为图像向上移动并且线图保持在下部,而我希望线图位于图像上。我提到了这个question,这是我想要实现的,但在我提到的问题中,解决方案解释了在图像上画一条线。在我的场景中,我必须绘制一个具有多个坐标的图形。

我尝试了参考问题中解释的解决方案,并在matplotlib 中显示图像时使用了extent,如下所示:

image = mpimg.imread(file)
plt.imshow(image, extent=[x[0], x[-1], y[0], y[-1]])
plt.plot(x, y)
plt.plot(x[0], y[0], 'og')
plt.plot(x[-1], y[-1], 'ob')
plt.show()

在上面的代码中,我使用了extent=[x[0], x[-1], y[0], y[-1]]),其中x[0], x[-1], y[0], y[-1] 表示xy 坐标的第一个和最后一个点,以便图像可以正确地适合图形。这样做,我得到以下结果:

如您所见,图像已正确拟合在图表中,但一旦我绘制了我的 x y 坐标,它看起来如下所示:

这不如图像上的线条好。我在这里很困惑,因为我做错了什么。我尝试遵循相同的参考答案并使用extent,但在绘制图像时向前移动了一点。以下是我的坐标:

x = [612, 590, 646, 712, 466, 475]
y = [623, 562, 557, 567, 530, 536]

绿点类似于开始,蓝点类似于结束。如果我不使用背景图像,下面是图表的图像。这里需要注意的一点是,x,y 坐标与上图不匹配,而仅与下图匹配(无背景图):

谁能告诉我我在这里做错了什么。请帮忙。谢谢

【问题讨论】:

  • 我认为问题不是特别清楚。所有提到的坐标都正确地绘制在图中。假设图像需要在第一个坐标和最后一个坐标之间精确延伸是否合理,很难从外部判断。但是,如果这样做的决定是合理的,那么图像都是正确的。

标签: python matplotlib


【解决方案1】:

如果extent 仅使用开始和停止位置,则图像的角将与这些位置匹配。这会将任何高于或低于图像的中间xy 值放在图像之外。

我不确定xy 坐标都包括什么,但如果它们在整个所需范围内都有点,您可以使用最小值和最大值来获取extent

image = mpimg.imread(file)
plt.imshow(image, extent=[min(x), max(x), min(y), max(y)])
plt.plot(x, y)
plt.plot(x[0], y[0], 'og')
plt.plot(x[-1], y[-1], 'ob')
plt.show()

但是,鉴于这些是边界框的跟踪位置,我认为情况并非如此,在这种情况下,extent 根本不应该基于这些值。相反,使用原始图像大小,我猜是 1280x720。

plt.imshow(image, extent=[0, 1280, 0, 720])

如果您正在跟踪边界框的中顶部,它似乎确实排成一行。

【讨论】:

  • 感谢您在 extent 中使用 max min 值的想法。我会试试看。一个问题是如何从图中移除放大/缩小、主页和其他按钮,这些按钮通常出现在图像的底部。谢谢
  • 我使用 jupyter notebook 绘制图像。然后我只需右键单击,保存,这就是我得到的图像。另外,xy 具体是什么?
  • 关于xy,我正在从tensorflow获取对象边界框的坐标。然后我将这些坐标传递给 OpenCV 的质心跟踪算法,该算法返回被跟踪对象质心的(x, y) 坐标。 Opencv 算法不断给出这些质心坐标,直到框架中出现对象。这些坐标是xy 值。
  • 我认为最小值/最大值不会起作用。如果它不起作用,原始图像尺寸是多少?此外,张量流给出了相对于左上角的位置。这里的位置是相对于左下角绘制的。
猜你喜欢
  • 1970-01-01
  • 2016-09-22
  • 2018-05-18
  • 1970-01-01
  • 2014-06-11
  • 2022-08-06
  • 2016-09-28
  • 2020-02-28
  • 2018-01-17
相关资源
最近更新 更多