【问题标题】:How can I modify an image without showing it?如何在不显示的情况下修改图像?
【发布时间】:2011-12-17 19:19:50
【问题描述】:

我有一个代码可以将图像加载到绘图中,然后在其上绘制一个矩形,然后将图像保存到 png 文件中:

    figure('Visible', 'off');
    imshow(im)
    hold on
    for n=1:size(windowCandidates,1)
        rectangle('Position',[x,y,w,h],'EdgeColor','g','LineWidth',2)
    end
    f=getframe;
    [img_bound,map]=frame2im(f);
    imwrite(img_bound, strcat(directory, 'name.', 'png')); 
    hold off

如何在不显示图形的情况下做同样的事情?只是修改并保存,我不希望用户看到所有这些过程)

谢谢!

【问题讨论】:

  • 矩形很容易栅格化,因此您应该能够修改图像矩阵并直接在其上绘制,然后将结果保存到磁盘。这避免了使用GETFRAME 之类的功能进行屏幕捕获的过程。您可能会在这里找到类似的问题...

标签: image matlab image-processing drawing


【解决方案1】:

您可以使用以下方法使图形不可见:

figure('Visible', 'off');

然后把它写成 Matlab fig via:

saveas(gcf, 'path/to/filename');

或者使用print命令来png就是这种情况

print('-dpng', 'path/to/filename');

stackoverflow 上的其他地方有很好的答案和解释的类似问题

更新

感谢Steve 指向这个无证的matlab function

function so;
close all;
im = imread('cameraman.tif');
hfig = figure('Visible', 'off'), imshow(im, 'Border', 'tight');
for n=1:2
rectangle('Position', [20*n, 20*n, 50, 50], 'EdgeColor', 'g', 'LineWidth', 2)
hold on;
end

F = im2frame(zbuffer_cdata(gcf));
imwrite(F.cdata, 'test.png'); 

%   Function copied from 
%   http://www.mathworks.com/support/solutions/en/data/1-3NMHJ5/?solution=1
%   -3NMHJ5
%
function cdata = zbuffer_cdata(hfig)
    % Get CDATA from hardcopy using zbuffer
    % Need to have PaperPositionMode be auto
    orig_mode = get(hfig, 'PaperPositionMode');
    set(hfig, 'PaperPositionMode', 'auto');
    cdata = hardcopy(hfig, '-Dzbuffer', '-r0');
    % Restore figure to original state
    set(hfig, 'PaperPositionMode', orig_mode);

【讨论】:

  • 我试过了,但没有用。它不断以越来越多的数字显示图像。我更新了问题的代码。
  • 问题出在 getframe 上。您可以在我链接的另一个 stackoverflow 示例之后保存一个图。
猜你喜欢
  • 1970-01-01
  • 2016-04-12
  • 1970-01-01
  • 2017-03-22
  • 2023-03-16
  • 2014-04-17
  • 1970-01-01
  • 2018-08-13
  • 2017-02-17
相关资源
最近更新 更多