Matlab 把你变成表情包

您所在的位置:网站首页 怎么把b站的表情包 Matlab 把你变成表情包

Matlab 把你变成表情包

2024-07-13 21:40| 来源: 网络整理| 查看: 265

任务说明

        在这个项目中,我们以萌萌哒的熊猫头作为背景,然后试着在背景图上加入朋友们的照片。效果如下图所示:

实现步骤

导入朋友的照片(前景照片);

处理前景照片(缩放、旋转,填充);

导入熊猫头照片(背景照片);

将前景和背景拼接起来形成表情包;

在表情包下面添加文字。

1 .导入前景图

 本文采用的是个人的自拍照作为前景图。

% 1 .导入前景图 A = imread('sm1.jpg'); image(A);

 

由size(A)可获得 A图片尺寸大小

2.等比例缩放前景照片

图片尺寸有点大,因此需要缩放一下。

% 2.等比例缩放前景照片 image_resize=imresize(A,0.3,'nearest'); image(image_resize);

可以看到尺寸明显减小。我们再size看看:

确实小了好多。

3.对前景照片进行灰度处理 % 3.对前景照片进行灰度处理 [d1,d2,d3]=size(image_resize); if(d3 > 1) image_resize = rgb2gray(image_resize);%如果是灰度图就不用先变换 image(image_resize); end img_gray = double(image_resize) / 255; img_gray = uint8(255 * img_gray * 0.5 + 0.5); imshow(img_gray);

可以看出,确实变灰了,这一步骤是方便下一步二值化的操作。

4.对前景照片进行二值化处理

对于二值化,相信大家都不陌生,就是把图片变成非黑即白的。

然而,在度娘以及各大博客,所述的二值化操作都是自动化的二值,即代码如下:

thresh=graythresh(img_gray); %自动确定二值化阈值 image_binary=imbinarize(img_gray,thresh); %对图像二值化 image(image_binary)

采用 graythresh() 函数自动计算阈值。但是用它计算出来的阈值事实上是不太适合有光影的人脸图片的。因此需要手动调节,自己找到最佳效果的阈值点。

本文所用图片,通过该函数计算所得阈值为 thresh=0.2824

而小编通过手动调节,较佳的阈值为 thresh=35/255≈0.1372

其结果如下:

thresh0.28240.1372效果图

代码如下:

% 4.对前景照片进行二值化处理 thresh=graythresh(img_gray);%确定二值化阈值 image_binary1=imbinarize(img_gray,36/255);%对图像二值化 image(image_binary1);

通过二值处理的图片会变成单通道,无法进行正常的image打印输出,强行输出,会出现下图情况---一片蓝色:

因此需要将该单通道数据赋值到RGB各通道上,进行补色。

image_binary(:,:,1)=image_binary1; image_binary(:,:,2)=image_binary1; image_binary(:,:,3)=image_binary1; image(image_binary);

这样我们就可以在figure里获得一张正常的视图了,如下图:

5.提取出感兴趣区域

接下来就是提取脸部成分,我们通过matlab的figure界面上的工具,结合截图工具,抓取我们想要的区域坐标情况,如图:

我们要抓取 x∈[108, 266],y∈[186, 340] 的区域。

% 5.提取出感兴趣区域 image_roi1 = image_binary(186:340, 108: 266); image(image_roi1);

通过输出,也发现是一片蓝:

这个蓝色看起来还有一丝恐怖,我们用上面的方法进行补色:

image_roi(:,:,1)=image_roi1; image_roi(:,:,2)=image_roi1; image_roi(:,:,3)=image_roi1; image(image_roi);

这下就回阳了:

6.旋转图片 7.将一些不需要的黑色区域删除掉 8.再次提取感兴趣区域并缩放

咋们这脸还是挺端正的不需要作什么旋转之类的操作吧,将就就这样。你们的图片素材需要的话,自己研究一下旋转操作,挺简单的。

可以参考一下这篇文章:https://www.cnblogs.com/cofludy/p/7953744.html

9.导入背景图片 % 9.导入背景图片 background = imread('back.jpg'); image(background); background_resize=imresize(background,0.7,'nearest'); [d1,d2,d3]=size(background_resize); if(d3 > 1) background_resize = rgb2gray(background_resize);%如果是灰度图就不用先变换 image(background_resize); end background_resize1(:,:,1)=background_resize; background_resize1(:,:,2)=background_resize; background_resize1(:,:,3)=background_resize; image(background_resize1);

就是它了:

10.组合两张图片成表情包  % 10.组合两张图片成表情包 image_roi = im2uint8(image_roi); [h_f, w_f, c_f] = size(image_roi); [h_b, w_b, c_b] = size(background_resize1); left = (w_b - w_f) / 2; % 前景图片在背景图片中的左边的横坐标 right = left + w_f; % 前景图片在背景图片中的右边的横坐标 top = 75; % 前景图片在背景图片中的上边的纵坐标 % top的值不同的前景图或背景图或许都需要改改参数哦 bottom = top + h_f; % 前景图片在背景图片中的下边的纵坐标 emoji = background_resize1; emoji(top: bottom-1, left: right-1,:) = image_roi; image(emoji); imwrite(emoji,'test.jpg'); % 保存模板图

一个基本的模板图就出来了,并且也保存到本地了,可以在其他平台上对该模板进行花样操作啦。

11.在表情包下面添加文本 % 11.在表情包下面添加文本 text(90,340,'死亡凝视-!','color','black','FontSize',38);

text()函数可以在figure界面输出文字,效果如下:

好嘞,咋们的表情包就做出来啦。 

接下来咋们只需要用截图工具截屏就可以当做表情包啦:

结语 

本项目基本流程就这样,是不是挺简单的啊~~~



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3