原理介绍
现在有三张图,有人物的图、二值的模板图(即我们要换图的模板,有目标板块)、一张背景图,如下
我们的目标是将人物图的背景换成第三张图的背景。
抠图换背景的原理
利用模板图(第二张二值图)将目标人物抠出,再将背景图中相应位置的值改为目标人物的值。
原理可能理解比较难,但代码实现很简单。在遍历背景图的双重循环中,判断当前位置是否为目标区域,如是,则令背景图当前位置的值等于人物图的相应位置的值。
代码实现
trimap = imread('trimap.png');
background = imread('background-small.png');
person = imread('input-small.png');
[m,n,~] = size(background);
for i =1:m
for j =1:n
if trimap(i,j) == 255
background(i,j,:) = person(i,j,:);
end
end
end
运行结果图
注意
1、更换时,也可以在人物图上改变,不过判断语句则要改写为以下语句
if trimap(i,j) == 0
2、一个二值图的坑,当我拿到二值图的时,默认为白色为1,结果一直换不成功。后面看了一下二值图矩阵的值,发现白色区域为255,修改后成功!