【问题标题】:Assign the result of multiple plots to one variable in MATLAB [duplicate]将多个绘图的结果分配给MATLAB中的一个变量[重复]
【发布时间】:2018-05-27 08:08:49
【问题描述】:

假设您有一张图片。 你绘制这张图片。

之后,您在该图像上绘制绿色跟踪。 您可以使用plot 函数轻松绘制此图。

在此初始绘图之后,您在同一图像上添加第二个跟踪。 因此,您有一个带有两个图的图形,就像这张图片一样。

如何将多个绘图的结果存储到一个变量而不保存到文件然后读取最终结果? 如果我打印然后读取图像,我可以做到这一点,但我想要相同的结果,而无需额外的保存到文件的步骤。

有什么线索吗?

示例代码及图:

imshow(a)
hold on
plot(centroidsFiltered(:,2),centroidsFiltered(:,1),'.g','LineWidth',0.5)
plot(int32(centroidsFiltered(i,2)), int32(centroidsFiltered(i,1)), '.g', 'MarkerSize',20)

绘图得出的数据就是这个图。

如何将所有结果信息存储到一个变量中?

数据可以在这里下载:https://expirebox.com/download/c95e9a0e5ac5530729f6960679ec9733.html

澄清 我想要从这个图中作为输出变量的是原始图像矩阵,其中绿线和绿色标记是可感知的矩阵位置的更新。

【问题讨论】:

  • 所以你想将图像保存为b,这样imshow(b) 会显示相同的图像?
  • 没错!如果我将图形保存到文件并读取保存的图像,我可以做到这一点。但是该解决方案不可行,因为例如在 for 循环中花费的时间太长。
  • a 只是一个数字矩阵。不要绘制它,只需更改a 中的值,或者更改b=a 并将b 中的值更改为绿色,而不是当前的灰色。
  • 是的,我已经考虑过了。仍然没有相应地做到这一点......
  • 如果您按照我已经要求的那样为 acentroidsFiltered 中的值提供说明性示例,将会有所帮助。没有那个,谁知道

标签: matlab variables plot graph matlab-figure


【解决方案1】:

您可以尝试使用getframeSee Documentation

imshow(a)
hold on
plot(centroidsFiltered(:,2),centroidsFiltered(:,1),'.g','LineWidth',0.5)
plot(int32(centroidsFiltered(i,2)), int32(centroidsFiltered(i,1)), '.g', 'MarkerSize',20)

b = getframe(gca);

重新创建情节:

figure;
imshow(b.cdata)

注意:b.cdataa 的大小不会完全相同。由于这是轴b 的屏幕抓取,因此很可能在边框周围有一些额外的像素。但是,通过仔细将单位设置为像素并使用可选的rect 输入到getframe,您可能能够获得正确的输出尺寸。

【讨论】:

  • 不错!它实际上工作得很好。尺寸略有不同,但有效。真的很有帮助。
  • 与此同时,我能够通过手动更新原始 RGB 图像上的像素来重新创建我想要的一切。我将比较这两种方法来检查速度性能。帮了大忙,感激不尽
  • 没问题。在 imshow 之前手动更新 RGB 肯定是一种选择,但如果您有更复杂的绘图或图形要叠加,那么它将变得非常困难。使用getframe 会容易得多,特别是如果您最终向图像添加比简单绘图更复杂的东西(文本、补丁等)。
猜你喜欢
  • 1970-01-01
  • 2011-08-27
  • 1970-01-01
  • 1970-01-01
  • 2019-06-29
  • 2012-06-26
  • 1970-01-01
  • 2021-10-24
  • 2015-08-11
相关资源
最近更新 更多