matlab修改证件照背景颜色

最近要用到背景为白色的证件照,可是手头上只有红底的,故用matlab弄了一个改背景颜色的程序,大体上效果还行。注意:matrix为背景区域,不同照片可能要修改一下rgb的范围。

img = imread('a.jpg');
[height,width,a] = size(img);
%% 选择相应的颜色背景区域
% matrix = (img(:,:,1)>250) | (img(:,:,2)>=250) | (img(:,:,2)>=190); %选择白色的像素点
% matrix = (img(:,:,1)<=150) & (img(:,:,2)<=200) & (img(:,:,3)>120); %选择蓝色的像素点
matrix = (img(:, :, 1)>=90) & (img(:, :, 2)<=50) & (img(:, :, 3)<=50); % 选择红色像素点
matrix(0.2*height:0.5*height,0.23*width:0.72*width) = 0;  %中间人像区域保持不变
se = strel('disk',3);
matrix = imclose(matrix,se); %关操作平滑边缘
%% 选择要改变背景的颜色
[a,b] = find(matrix ==1);
blue = [67,142,219]; %改成蓝色
red = [255, 0, 0]; %改成红色
white = [255,255,255]; %改成白色
color = white; 
for i = 1:size(a)
    img(a(i),b(i),1) = color(1);
    img(a(i),b(i),2) = color(2);
    img(a(i),b(i),3) = color(3);
end
%% 平滑处理
g1=medfilt2(img(:,:,1));%红
g2=medfilt2(img(:,:,2));%绿
g3=medfilt2(img(:,:,3));%蓝
img1(:,:,1) = g1;
img1(:,:,2) = g2;
img1(:,:,3) = g3;
imshow(img1);
imwrite(img1,'b.jpg')

猜你喜欢

转载自blog.csdn.net/vandance/article/details/81981101
今日推荐