从 imshow 保存图像

Save image from imshow

我想在完成后将图像保存到文件中imshow(im,[]);稍后在 GUI 中显示它。我正在尝试以下代码,但它不起作用。

 New= imshow(uint8(MHI{t}),[]);
 imwrite(New,'TMHI.jpg','jpg')

如有任何帮助,我们将不胜感激。谢谢你。

imshow函数仅用于在MATLAB中显示图像。如果你想保存它,你根本不需要imshow。并且:imshow() 返回的值 (New) 是图窗的句柄。如果要修改图形在屏幕上的显示方式,则需要该句柄。

将图像写入磁盘,只需要imwrite函数,语法为:

imwrite(A,filename)

其中 A 是图像数组。 如果文件名以 .jpg 结尾,则 MATLAB 将默认创建 JPEG 图像,因此您无需指定。 (当然,你仍然可以。)

但是在保存之前:你的图像规范化有问题。 MATLAB 假定 double 图像缩放为 [0,1]uint8 图像缩放为 [0,255]。使用 imshow(im,[]) 您可以 覆盖 这些默认值并使 MATLAB 计算新值。保存时你会遇到同样的问题。解决方案是适当地规范化图像。这可以使用 im2uint8 函数完成,该函数将输入缩放到最大值 255,并将其转换为 uint8。请注意,如果需要,您必须手动删除最小值:

newImage = im2uint8(MHI{t} - min(MHI{t}(:)));
imwrite(newImage,'TMHI.jpg')

如果你真的需要在 matlab 中保存显示图形的内容(有时当你使用 imagesc 进行显示时也很有用,因为它有一些智能逻辑可以正确缩放你的值范围)你可能会对 savefig and saveas 可以让你保存图形的内容。也可以像这样保存带有子图的图形或数字。

在这种情况下,您可以使用类似的东西:

F = imshow(uint8(MHI{t}),[]);
saveas('MHI.png');

如果您真的只需要保存存储在 MHI{t} 中的图像,hbaderts 的答案就是正确的方法...

只需使用我的 NormalizeImage 函数并正常保存图像:

img = NormalizeImage(imgDouble);
imwrite(img ,'MyImage.png');

我的 NormalizeImage 函数:

function img8bpp = NormalizeImage(imgDouble)

minImgDouble =  min(imgDouble(:));

factor = (255-0)/(max(imgDouble(:)) - minImgDouble);

%img8bppB = im2uint8(imgDouble-minImgDouble);

img8bpp = uint8((imgDouble-minImgDouble).*factor);

%im2uint8 does not work, duno y
%imgDif = img8bppB - img8bpp;

end