版权声明:本文为博主原创文章,转载请注明出处。 https://blog.csdn.net/huanhuan_Coder/article/details/81027788
最近使用MATLAB对JPEG格式的灰度图像进行二值化,二值化后的图像非0即1(1代表的是白色,0代表的是黑色),我按照图像原本的名字保存,所以格式也没变,但是再次打开图像时还是存在非01的灰度值。
最初的时候我有bug的代码如下:
% writen by liuhuan
imgPath = 'F:\cutImage\123\'; % 图像库路径
imgDir = dir([imgPath '*.jpg']); % 遍历所有jpg格式文件
for i = 1:length(imgDir) % 遍历结构体就可以一一处理图片了
img = imread([imgPath imgDir(i).name]); %读取每张图片
thresh = graythresh(img); %自动确定二值化阈值
imgBW = im2bw(img,thresh); %对图像二值化
imwrite(imgBW,[imgPath imgDir(i).name]);
end;
下面这是处理之前灰度图的部分像素值:
下面是二值化之后的图像的部分像素值:
当我打开二值化之后的图像时,出现了以下状况:
按照逻辑来说,上图像素应该是非0即255的,但是为什么出现了166,85等值呢?原因是我在保存图片的时候使用的是jpg格式,但是jpg格式的图片是有损耗的,bmp格式是没有损耗的,所以我们要选择保存为bmp格式。修改的代码如下:
% writen by liuhuan
imgPath = 'F:\cutImage\123\'; % 图像库路径
imgDir = dir([imgPath '*.jpg']); % 遍历所有jpg格式文件
for i = 1:length(imgDir) % 遍历结构体就可以一一处理图片了
img = imread([imgPath imgDir(i).name]); %读取每张图片
filename = imgDir(i).name; %获取图片的名字
thresh = graythresh(img); %自动确定二值化阈值
imgBW = im2bw(img,thresh); %对图像二值化
i = find('.'==filename);
imname = filename(1:i-1);
imwrite(imgBW,[imgPath strcat(imname,'.bmp')]);
end;
下面我们讲讲怎样修改图片名。
- filename = imgDir(i).name; 是获取文件夹下图片的名字,例如cat.jpg,下面我们以此为例。
- i = find(‘.’==filename);是计算图片名称中. 的索引,如在cat.jpg中,. 的索引是4。
- imname = filename(1:i-1);是取索引为从1到4-1的字符串为名字,即cat。
- imwrite(imgBW,[imgPath strcat(imname,’.bmp’)]);是将二值化的图片保持到后面的地址中。
这样保存的图就不存在灰度值了~