python实现面部特效_Python实现在线批量美颜功能过程解析
结果
然后直接放源码:
import cv2 as cv
source = cv.imread("zhaopian.jpg")
dst = cv.bilateralFilter(src=source, d=0, sigmaColor=30, sigmaSpace=15)
cv.imshow("source", source)
cv.imshow("dst", dst)
cv.waitKey()
cv.destroyAllWindows()
好了,本文结果部分介绍结束,想进一步了解一下原理的同学可以接着往下看了,没啥兴趣的可以左上角了。
双边滤波原理
上面的图片美颜效果其实使用的是 OpenCV 中为我们提供的双边滤波器,是一种图片降噪算法。
双边滤波(Bilateral filter)是一种非线性的滤波方法,本质是基于高斯滤波。
前面的文章介绍过,高斯滤波的方式会造成边缘模糊化,这是没办法的事情,这是高斯滤波过滤方式而导致的。
而双边滤波就是在高斯滤波的基础上,对高斯滤波的方式加以改进,结合图像的空间邻近度和像素值相似度的一种折处理,同时考虑 空域信息(domain) 和 值域信息(range) ,达到保边降噪的目的。
说人话就是双边滤波在进行滤波的过程中,不光要考虑周围像素值与中点像素值的大小之差,还需要考虑空间上的距离,进而确定该点对中间点的影响因子。
比如在一张图像中,相邻的像素点的颜色会非常相近,但是如果在边缘区域,相邻元素点的颜色变化会非常的大。
高斯过滤器的过滤过程中就是因为没有考虑边缘区域而导致过滤后图像边缘模糊,而双边滤波由于在过滤的过程中考虑到了周围像素值与中点像素值的差值大小,从而会确定一个影响因子,从而实现图片的保边降噪。
具体的实现原理如下:
希望你们的高中数学没有都还给你们的数学老师
整个双边滤波的算法分为两部分,一个是颜色值的相似度(值域核),公式如下:
$$
r(i, j, k, l) = exp( - \frac{||f(i, j) − f(k, l)||2}{2{\sigma2_r}} )
$$
另一个是计算空间距离的相似度(空域核),也就是说,离得越近,相似度越高,公式如下:
$$
d(i, j, k, l)=exp( - \frac{(i−k)^2 + (j−l)2}{2{\sigma2_d}})
$$
上面的逻辑还是很清晰,千万不要被一堆符号弄晕了。
这里 (i, j) 代表的是要处理的像素点的坐标点,而 (k,l) 则是要处理的范围内,可能影响到其值的像素点的坐标。
最终的权重系数 w(i,j,k,l) 取决于空域核和值域核的乘积,公式如下:
$$
w(i,j,k,l)=d(i,j,k,l) ∗ r(i,j,k,l) = exp( - \frac{(i−k)^2 + (j−l)2}{2{\sigma2_d}} - \frac{||f(i, j) − f(k, l)||2}{2{\sigma2_r}})
$$
下面是一个经典的双边滤波的原理示意图:
从这个图中可以看出,在图(b)空域核上,每个像素的权重是符合高斯分布的,而在图(c)的值域核上,由于像素取值相差过大,不同颜色的权重系数相差也很大,双边过滤过滤完成后,边缘两侧的像素点保留了原有的色彩值。
接下来还是看下双边滤波的原函数:
def bilateralFilter(src, d, sigmaColor, sigmaSpace, dst=None, borderType=None)
src:原图
d:像素邻域的直径。如果这个值设为非正数,那么 OpenCV 会从第五个参数 sigmaSpace 来将它计算出来。
sigmaColor:颜色空间滤波器的 $\sigma$ 值。这个参数的值越大,就表明该像素邻域内有更宽广的颜色会被混合到一起,产生较大的半相等颜色区域。
sigmaSpace:坐标空间中滤波器的 $\sigma$ 值,坐标空间的标注方差。他的数值越大,意味着越远的像素会相互影响,从而使更大的区域足够相似的颜色获取相同的颜色。当 d > 0 , d 指定了邻域大小且与 sigmaSpace 无关。否则, d 正比于 sigmaSpace 。使用过程中我发现这个值越大,图像的过渡效果越好。
源代码我就不放了,实际上只有那一行代码,不过希望看到本文的各位除了知道双边滤波能对图像进行美颜以外还是能稍微了解下原理。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
python实现面部特效_Python实现在线批量美颜功能过程解析相关推荐
- python实现qq登录_python实现QQ批量登录功能
本文实例为大家分享了python实现QQ批量登录功能的具体代码,供大家参考,具体内容如下 小编收集整理的第一份代码:python3.6批量登陆QQ import os import time impo ...
- python实现面部特效_python 实现波浪滤镜特效
本文用 Python 实现 PS 滤镜的波浪特效 import numpy as np from skimage import img_as_float import matplotlib.pyplo ...
- python实现面部特效_Python 3 利用 Dlib 实现摄像头实时人脸检测和平铺显示
1. 引言 在某些场景下,我们不仅需要进行实时人脸检测追踪,还要进行再加工:这里进行摄像头实时人脸检测,并对于实时检测的人脸进行初步提取: 单个/多个人脸检测,并依次在摄像头窗口,实时平铺显示检测到的 ...
- python实现面部特效_Python实现人脸带墨镜效果
DEAL WITH IT是这样一个效果,眼镜从屏幕外飞进来,带在用户的脸上.这种效果的最佳实例是以一种独特的方式完成的. 今天,我们将编写一个生成器,该生成器使用任何有面部的静态图像作为输入.如果你想 ...
- python列表实现原理_Python动态类型实现原理及过程解析
在python中,我们使用变量时,并没有声明变量的存在和类型.类型是在运行过程中自动决定的. a = 3 python将会执行三步去完成上面这个请求. 1.创建一个对象代表3 2.创建一个变量a,如果 ...
- 用python处理excel 数据分析_Python应用实现处理excel数据过程解析
实现功能 excel表格中有4列数,分别为RMF计算得到的 β,γ,势能面及组态,需要挑选出相同 β 值下势能面最低时的组态.为了减小数据量,先将 β 值保留两位小数. 代码 import xlrd ...
- python 交换机巡检脚本_Python自动巡检H3C交换机实现过程解析
1.通过netmiko模块登录交换机,协议ssh,执行收集信息命令,保存至txt文件 2.过滤txt文件中的内容,保存到excel,使用xlwt模块实现. 3.sendmai发送excel邮件.或者发 ...
- python编写登录_通过Python编写一个简单登录功能过程解析
通过Python编写一个简单登录功能过程解析 需求: 写一个登录的程序, 1.最多登陆失败3次 2.登录成功,提示欢迎xx登录,今天的日期是xxx,程序结束 3.要检验输入是否为空,账号和密码不能为空 ...
- python修改电脑名称_python 脚本之批量更改主机名
今天接到上面工作任务,让更改多台主机的主机名称.使用python paramiko Module,随手写了一个批量修改主机名的脚本. #!/usr/bin/env python #-*- coding ...
最新文章
- PowerMockito使用详解
- redmine2.4.2 插件安装
- 为什么C语言成了大学的必修课?
- 电脑字体模糊_小红书上传视频模糊?做小红书视频99%的工具都在这了
- 用redis实现分布式锁
- CCF202009-1 称检测点查询
- 京东或将裁员 12000 人!雷军年薪百亿;马云:阿里没人敢跟我打赌 | 极客头条
- codeproject.com被封了?
- 高等代数章节知识回顾(干货笔记)
- 盈建科中地震波_[GMS][地震波][选波]YJK地震波反应谱分析与地震波选取
- marlab中主成分得分怎么求_羡慕神仙权重?主成分与因子分析带你揭开权重的秘密...
- c语言实现生成彩票随机号
- Pytorch 深度学习入门与实践 第二章 pytorch快速入门 (1)
- **[UE4技巧]** UE4 的导入模型人物处理(下) — 全面替换小白人,实现人物模型自由
- 什么叫诚实_诚信是什么
- Java程序是怎么运行的?
- 【ava数据集】ava数据集下载 使用迅雷
- OpenLayers-基于OpenLayers的地图应用中图标汉化
- Happy Father's Day 告诉父亲你爱他
- npm ERR! Error: EACCES: permission denied, access '/usr/local/lib/node_modules'