最近在用octave (类似于matlab的计算软件, 函数和matlab一致) 写程序的时候, 在显示图像和保存图像的时候遇到了一些小问题, 所以简单的总结了一下。
本文用的图像为灰度图像:
imread() 返回的图像类型是uint8类型, 这时用imshow显示图像的时候, imshow会认为输入矩阵的范围在0-255, 如果imshow的参数为double类型的,那么imshow认为输入矩阵的值为0-1.
很多时候需要将图像转换为double类型的, 但是转换以后直接使用imshow显示的是一片白色, 是因为当imshow显示图像的时候, 会认为double类型的图像矩阵的范围在0-1, 超过1的像素值当作1处理, 这样就是几乎所有的像素都是白色。
情况1:
% img will be uint8 type
img = imread('syz.bmp');
% imshow: when the parameter img is uint8 type,
% imshow will default make the range of pixel value as [0-255]
imshow(img);
fprintf('Program paused. Press enter to continue.\n');
pause;
这个时候直接显示读入的图像是正确的, 因为这个时候图像的类型是uint8
显示结果:
Octave与MATLAB中imshow显示double图像的解决方法

本文介绍了在使用Octave(MATLAB的类似软件)时遇到的显示和保存图像的问题,特别是关于double类型图像的处理。当imshow显示double类型的图像时,若像素值超过1,则显示为白色。解决方法包括调整图像范围到0-1或通过减去图像最小值确保所有像素为正。示例代码展示了正确显示double类型图像的步骤。
最低0.47元/天 解锁文章
794

被折叠的 条评论
为什么被折叠?



