用Python的OpenCV库实现一键美颜功能

2020-05-14 14:57:58

请用微信扫描二维码

请用微信扫码分享

❤️

最近在研究图片处理方面的python第三方库。了解到OpenCV是这图像处理方面的集大成者了。

OpenCV的全称是Open Source Computer Vision Library,是一个跨平台的计算机视觉库。OpenCV是由英特尔公司发起并参与开发,以BSD许可证授权发行,可以在商业和研究领域中免费使用。OpenCV可用于开发实时的图像处理、计算机视觉以及模式识别程序。该程序库也可以使用英特尔公司的IPP进行加速处理。来自维基百科

于是,做了一个“一键美颜”的网页工具:一键美颜

所谓美颜,市场上已有的大部分美颜工具就是对图片人脸图片中较为粗糙的部分进行磨皮,即在一幅图中,我们看起来的非常粗糙的点,可以视作是一些噪声,而我们就需要借助工具去去除这些噪声,使得图像看起来更加平滑。

这里我用到的是双边滤波来过滤掉这些噪声。双边滤波是将图像的像素点从空间上的邻近程度,和像素值之间的相似程度两个方面去考虑,从而叫做双边,即同时考虑两方面的信息。 双边滤波可以很好的保留图像中的边缘细节,使得我们的图像在很好的过滤噪声的同时,使得图像不会过于的失真,也就是使得图像看起来很自然,P的痕迹不明显。转自公众号菜鸟学Python

OpenCV中有集成这个算法,cv.bilateralFilter ()

import cv2
# 可更改value调整滤波的程度
value = 28

def Beauty(path, filename):
    img = cv2.imread(path)
    img_res = cv2.bilateralFilter(img, value, value * 2, value / 2)
    filename = './static/out/{}'.format(filename)
    cv2.imwrite(filename, img_res)
    return filename

这个 value 值表示在过滤的过程中,图像中的每个像素领域的直径范围,这个值越大,图片中的噪声滤除的越好,但是图片看上去也会越像是P过的,而这个值越小,则图片美颜的效果会越差。测试后,发现value=28时效果较好。

以下是美颜对比图

卡通图也可以美颜

嘶~