通过matlab实现数字图像处理中的抠图换背景功能

 适合背景为蓝色的图片,效果最好。

如果背景色为别的颜色,可对代码进行调整修改后使用(其实这里的代码最开始由于报错已经经过我的修改了)

可能出现的异常情况:

1.待抠图片以及需要替换的背景图片放置在代码文件所在的目录,不然会无法读取,不出结果。

2.图片比例应当相同,大小不要差太多。(大小就是下图所示的数值,实际上大小对结果有无影响我并不确定,大家可以自行试验)

3.图片名一定要修改,我这里的原图是“wybb.jpg”背景图名是“background.jpg”,如果你的图片是png格式把.jpg改成.png就ok了。

 

代码如下:

clear;clc;close all;%清理界面
input_image=imread('wybb.jpg');%读取图片
%抠图
figure(1);
subplot(141);imshow(input_image);title('原图');
image=im2double(input_image);%转换成统一的double精度,方便计算
BW_RGB=im2bw(input_image,0.65);%显示RGB二值化结果
subplot(142);imshow(BW_RGB);title('二值化-RGB');%显示RGB二值化结果
BW_R=im2bw(image(:,:,1),0.65);
subplot(143);imshow(BW_R);title('二值化-R');%显示R二值化结果
BW_B=im2bw(input_image(:,:,3),0.65);
subplot(1,4,4);imshow(BW_B);title('二值化-B'); %显示蓝色二值化结果
BW_RGB_inverse=~BW_RGB;
BW_B_inverse=~BW_B;
BW_R_inverse=~BW_R; %将二值化结果取反
figure(2);
imshow(BW_B_inverse);title('二值化-B-取反');
%根据以上二值化所得结果,从其中选取两个二值化图像合成想要的二值化像素图

BW=im2bw(BW_B_inverse+BW_R);
%多次测试,发现蓝色二值化取反结果与红色二值化结果合成图像最为完整
figure(3);
subplot(2,2,1);imshow(BW);title('二值化-B-取反+二值化-R');
BW_fill1=imfill(BW,'holes'); %空洞填充函数:imfill(填洞)
subplot(2,2,2);imshow(BW_fill1);title('空洞填充_1');
N1=4;se1=strel('disk',N1); %设置膨胀算子
BW_dilate1=imdilate(BW_fill1,se1); %膨胀
subplot(2,2,3);imshow(BW_dilate1);title('膨胀');
N2=7;se2=strel('square',N2); %设置腐蚀算子
BW_erode1=imerode(BW_dilate1,se2); %腐蚀
subplot(2,2,4);imshow(BW_erode1);title('腐蚀');
%闭运算:对此二值化图像依次进行膨胀,腐蚀,用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。
% 膨胀算法:将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。可以用来填补物体中的空洞。
%腐蚀算法:是一种消除边界点,使边界向内部收缩的过程。可以用来消除小且无意义的物体。
Im=imread('background.jpg'); %设置背景
[a,b]=find(BW_erode1==1);
A=Im;
for i=1:size(a,1)
A(a(i),b(i),1)=input_image(a(i),b(i),1);
A(a(i),b(i),2)=input_image(a(i),b(i),2);
A(a(i),b(i),3)=input_image(a(i),b(i),3);
end
figure(4);
imshow(A);title('抠图'); %将抠得图像与背景结合,并显示。

运行结果如下(用的是自己的证件照,人太丑就打下码吧)

 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Violet羲子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值