基于matlab的图片特效开发
实验目的:先将一张图片去掉背景颜色,选取其主体部分,再在一张背景图中插入多张照片进行合成
在本实验项目中,选取天空图像和蝴蝶图像,将蝴蝶图像嵌入到天空图像中
1.读取原始图像并初始化Alpha通道
Im_name = 'butterfly.jpg';
[I, ~, originalAlpha] = imread(Im_name);
alpha = ones(size(I, 1), size(I, 2));
(Im_name = ' '中复制自己电脑上的文件地址)
读取蝴蝶图像。初始化Alpha通道,使所有像素不透明。
2.查找接近白色的像素并将其设为透明
whitePixels = I(:,:,1) > 200 & I(:,:,2) > 200 & I(:,:,3) > 200;
alpha(whitePixels) = 0;
使用逻辑索引查找接近白色的像素,并将这些像素的透明度设置为0。
3.保存带Alpha通道的图像
imwrite(I, 'butterfly.jpg', 'Alpha', alpha);
保存图像,注意JPEG格式不支持Alpha通道,应使用PNG格式
4.读取带透明背景的蝴蝶图像,并缩放
[B, ~, B_alpha] = imread('butterfly.jpg');
scale = 0.05;
B = imresize(B, scale);
B_alpha = imresize(B_alpha, scale);
读取带透明背景的蝴蝶图像,并缩放
5.读取天空图像
C = imread('sky.jpg');
(imread = ' '中复制自己电脑上的文件地址)
6.将蝴蝶随机放置在天空图像上
[C_height, C_width, ~] = size(C);
[B_height, B_width, ~] = size(B);
num_butterflies = 40;
result_image = C;
for i = 1:num_butterflies
x_pos = randi([1, C_width - B_width]);
y_pos = randi([1, C_height - B_height]);
angle = randi([0, 360]);
rotated_B = imrotate(B, angle, 'bilinear', 'crop');
rotated_B_alpha = imrotate(B_alpha, angle, 'bilinear', 'crop');
for c = 1:3
insertRegion = result_image(y_pos:(y_pos+B_height-1), x_pos:(x_pos+B_width-1), c);
butterflyRegion = rotated_B(:,:,c);
alphaRegion = rotated_B_alpha / 255;
result_image(y_pos:(y_pos+B_height-1), x_pos:(x_pos+B_width-1), c) = ...
insertRegion .* (1 - alphaRegion) + butterflyRegion .* alphaRegion;
end
end
获取天空和蝴蝶图像的尺寸,随机生成蝴蝶的数量及其位置和角度,将旋转后的蝴蝶按其透明度合成到天空图像中。
7.显示结果图像
imshow(result_image);