是否有任何替代方法可以使用getframe
和saveas
将图形内容保存到光栅图像中以进行进一步处理?
方法1: getframe
h = figure('visible', 'off');
a = axes('parent', h);
% render using `scatter3()` or other plot function.
content = frame2im(getframe(h));
Run Code Online (Sandbox Code Playgroud)
这具有显示图形在调用中执行屏幕捕获的严重缺点,getframe()
并且当在循环中执行这样的渲染时(即,content
在每次迭代时将其保存为视频帧)存在问题.
方法2: saveas
h = figure('visible', 'off');
a = axes('parent', h);
% render using `scatter3()` or other plot function.
saveas(h, '/path/to/file.png');
content = imread(/path/to/file.png');
Run Code Online (Sandbox Code Playgroud)
这种方法具有写入磁盘的严重缺点,这在多线程应用程序中存在问题,并且比直接渲染到内存要慢.因为saveas()
在调用PNG编码器之前显然会渲染到内存,所以我想要的是可能的,但我在MATLAB文档中找不到任何只执行渲染部分的函数.
问题:
您是否知道将任意axes
内容渲染到光栅图像的替代方法?
我想要显示图像并在其上绘制一些内容,然后将其保存为与原始图像大小相同的图像.我的MATLAB代码是:
figH = figure('visible','off');
imshow(I);
hold on;
% plot something
saveas(figH,'1','jpg');
close(figH);
Run Code Online (Sandbox Code Playgroud)
但是得到的图像"1.jpg"已经在图中以及图像中保存了非图像区域.我怎么解决这个问题?
这可能是一个有点奇怪的问题,但无论如何.有时候,我在整个地方(大陆)使用ssh进入服务器或实验室计算机以检查内容,有时甚至运行Matlab或Octave以查看最新数据等.然后,当我需要任何类型的情节时,有趣的开始.要么我把一大块可能的垃圾通过互联网复制到我的电脑上并在本地生成情节.或者,如果先前的尝试不可选,我通过ssh和X-forwarding运行Matlab,这在低带宽和/或高ping时是痛苦的.
实际上,我想知道是否有办法在shell中生成类似于80年代的老式字符模式图,至少是带有线或点的简单东西(没有X-forwarding).拥有一个"丑陋"(但很酷?)的角色模式情节至少可以让我确定我是在看一条线,一条抛物线还是只是简单的废话 - 这可能是非常有用的.我知道,有些东西可以通过聪明的数学来确定,但是嘿,抽象思维被高估了.
编辑...另一个相关的(?)标记.