by HPC_ZY
经常有朋友问,为什么我imshow出来的图一片白,我这明明是灰度图的。
这是因为没弄好图片的类型。
imshow
这个函数能显示两大类型的图像
- 整形,最常见 uint8
- 非整形,最常见double
当图像为uint8类型时,其支持范围 0~255
当图像为double类型时,其支持范围 0~1(大于1的为白色,小于0的为黑色)
错误使用
- 把uint8的图像转为double后直接显示,问题代码如下
%% 问题代码
im = imread('*.*');
im = double(im);
imshow(im)
所有大于1的像素就都为白色了,这也是最最最常见的错误。
如果就想转为double,同时还想显示,解决方法如下
%% 解决方法
im = imread('*.*');
im = double(im)/255;
imshow(im)
或
im = imread('*.*');
im = im2double(im);
imshow(im)
- 把已经归一化的图像转为uint8后直接显示,问题代码如下
%% 问题代码
im = imread('*.*');
im = mat2gray(im); % 归一化
im = uint8(im)
imshow(im)
最大的值才1,整个图像都黑了,这也第二类的错误。
如果需要这么转,解决方法如下
%% 解决方法
im = imread('*.*');
im = mat2gray(im); % 归一化
im = uint8(im*255)
imshow(im)
其他
- 所以使用imshow前,需要核对图像的类型。有必要的时候还可以在工作区点开矩阵看看,里面都是些什么值。
- 有时不想去费心思,也可以使用imagesc()代替imshow()。