python可以实现的功能_学会利用Python实现“美颜”功能

下载W3Cschool手机App,0基础随时随地学编程导语

利用Python实现美颜。。。

这是之前在GitHub上下载的一个项目。。。

似乎有些日子了。。。

所以暂时找不到原项目的链接了。。。

今天抽空看了下它源代码的主要思想,似乎挺简单的。。。

于是决定用Python3自己复现一下。。。

T_T感觉还是挺有趣的。。。

Just have a try!

相关文件

密码: 6rd8

开发工具

Python版本:3.5.4

相关模块:

numpy模块;

cv2模块;

dlib模块。

环境搭建

安装Python并添加到环境变量,pip安装需要的相关模块即可。

注1:

cv2即opencv-python模块。

注2:

dlib模块在anaconda3下可以直接pip安装,否则容易出错。相关文件中提供了编译好的python3.5版本的whl文件,供非anaconda3使用者安装使用。

主要思路

声明:

主要思路是根据项目源代码推测的,不算是我的思路,希望我没有猜错。

特征提取:

利用dlib库提取面部特征,面部特征点包括:

下巴、嘴、鼻子、左右眼、左右耳等部分。

针对人脸的不同部分进行具体的美化操作。

另外,由于dlib库无法提取额头边界坐标,而额头的美颜也十分重要。。。

因此假设额头在眉心附近,并通过相应的参数做出一个椭圆作为额头的粗略估计。

实际操作过程中需要将与五官重合部分剔除,并只保留与鼻子肤色相同的部分。

美化方法:

就是很平常的美白、增加鲜艳度、磨皮和锐化操作。

美白和增加鲜艳度在HSV空间实现;

磨皮用了高斯滤波器和双边滤波器;

锐化用的是卷积锐化算法。

具体实现过程详见源代码。

使用演示

说明:

根据自己的需求调用相应的美化方法实现美颜。

默认参数仅供参考,以实际效果为准,可以自己调整一些参数让效果看起来更棒。

使用方式:

在cmd窗口运行Beauty.py文件即可。

待处理照片路径在源代码232行,请自行修改。

演示1:

640?wx_fmt=png

失败2:

640?wx_fmt=png

失败3:

640?wx_fmt=png

T_T好吧效果比较一般。。。

更多

总体来说。。。效果比较一般。。。

同时我发现有些头型并不适合用这个算法美颜。。。比如我试了马云的照片。。。结果很不OK。。。

而且参数似乎不太好调。。。

做成Demo的话或许会好调很多。。。

有兴趣的朋友可以试试去做个美图秀秀高度不仿版。

T_T,就这样吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于人像分割的局部美颜通常指的是对人脸区域进行美颜处理,同时保留原始图像的背景。实现方式可以使用人像分割技术来分离人脸和背景,然后对人脸区域进行美颜处理。 以下是一种基于GrabCut算法的实现方法: 1. 加载图像并将其转换为灰度图像。 ```python import cv2 img = cv2.imread('your_image.jpg') gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) ``` 2. 使用OpenCV的Haar级联分类器来检测人脸。 ```python face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') faces = face_cascade.detectMultiScale(gray, 1.3, 5) ``` 3. 对于每个检测到的人脸区域,使用GrabCut算法进行人像分割。 ```python # 创建一个掩码(mask),将人脸区域初始化为前景(前景=1,背景=0) mask = np.zeros(img.shape[:2], np.uint8) for (x,y,w,h) in faces: rect = (x, y, w, h) mask, bgdModel, fgdModel = cv2.grabCut(img, mask, rect, None, None, 5, cv2.GC_INIT_WITH_RECT) # 将掩码中标记为前景的区域提取出来作为人像 person = cv2.bitwise_and(img, img, mask=(mask==cv2.GC_FGD).astype(np.uint8)) ``` 4. 对人像区域应用美颜效果。 ```python # 对人像区域应用美颜效果 person = cv2.GaussianBlur(person, (15, 15), 0) # 高斯模糊 person = cv2.addWeighted(person, 1.5, person, 0, 10) # 图像增强 ``` 5. 将美化后的人像区域和原始图像的背景合并。 ```python # 将美化后的人像区域和原始图像的背景合并 background = cv2.bitwise_and(img, img, mask=(mask==cv2.GC_BGD).astype(np.uint8)) result = cv2.bitwise_or(person, background) ``` 最后,使用`cv2.imshow`函数将处理后的图像显示出来。 ```python cv2.imshow('image', result) cv2.waitKey(0) cv2.destroyAllWindows() ``` 需要注意的是,GrabCut算法需要人工指定一个矩形框来包含人脸区域,如果矩形框不准确,会影响分割的效果。另外,GrabCut算法的计算量比较大,处理较大的图像可能会比较耗时。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值