第一种
建立如下图所示文件夹:
Input文件加中放的是需要批量分割的图片,Output文件夹中是批量分割后储存的图片,如图:
代码:
% 确保输入路径和输出路径是正确的
Input_path = 'D:\leaves\Input\';
Output_path='D:\leaves\Output\';
if ~exist(Input_path, 'dir') || ~exist(Output_path, 'dir')
error('输入路径或输出路径不存在');
end
% 获取输入路径下所有的.jpg图片
namelist = dir(strcat(Input_path,'*.jpg')); %获得文件夹下所有的 .jpg图片
len = length(namelist);
for i = 1:len
% 获取图片的文件名
name=namelist(i).name;
% 读取图片
P=imread(strcat(Input_path, name)); %图片完整的路径名
Pr=P(:,:,1);%图片的r分量
Pg=P(:,:,2);%图片的g分量
Pb=P(:,:,3);%图片的b分量
Pgr=Pr-Pb;
Pbw=im2bw(Pgr,110/255);%更改该数值可提取不同图片
Pf=uint8(Pbw);%将logical数据类型转化为uint8型
Pkou=Pf.*P;
% 保存处理后的图片
imwrite(Pkou,[Output_path,'leaf',int2str(i),'.jpg']); %完整的图片存储的路径名 并将整形的数字 转换成字符串
end
第二种
代码:
clear all;
clc;
path=[uigetdir(),'\']; %选取文件的图片
n=5;
I=cell(1,n); %元胞数组
for i=1:n
imageName=strcat(path,num2str(i),'.jpg');
%imageName=strcat('f:\TestPic2\',num2str(i),'.jpg');
%指定文件,路径有时候换电脑运行,由于路径不对会出错
%I= imread(imageName);
I{i} = imread(imageName);
%figure,imshow(I{i});
I_r=I{i}(:,:,1);
I_g=I{i}(:,:,2);
I_b=I{i}(:,:,3);
I_gb=I_g-I_b;
%imshow(I_gb);
figure,imhist(I_gb)
Obj=im2bw(I_gb,30/255);
%figure,imshow(Obj)
Obj=bwmorph(Obj, 'dilate'); %膨胀操作
%figure,imshow(Obj)
se=strel('line',11,90);
Obj=imerode(Obj, se); %腐蚀
subplot(1,2,1),imshow(I{i}),title(strcat('原始图像',num2str(i)));
asubplot(1,2,2),imshow(Obj),title(strcat('背景分割后的图像',num2str(i)));
%Obj=uint8(Obj);
%imwrite(Obj,strcat(num2str(i),'Obj.jpg'));
end
其实基本都差不多,比较简单,中间分割部分也可以替换。