MATLAB—两种简单的批量处理背景分割

第一种

建立如下图所示文件夹:

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

其实基本都差不多,比较简单,中间分割部分也可以替换。

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值