从 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
我想在完成后将图像保存到文件中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