OpenCV 利用高斯模糊实现简单的磨皮美颜效果
1、高斯模糊
首先高斯指的是高斯函数,这个我想大家应该都知道,是一种非常常见的概率分布函数。大概就长这样吧。
通过均值模糊类比,我们可以大胆的猜出来高斯模糊的含义:
每一次需要处理的像素矩阵中不同地方的像素的值在最后的赋值像素的占比是不一样的。这个占比是按照高斯函数所分布的。
也就是说,越是远离中心像素的像素所占比重就更少,而中心像素值在赋值像素中的比重是最重的。
或者说,我们知道之前均值模糊所乘以的矩阵是
而高斯模糊中所乘的 3*3 矩阵可以是这样的
可视化后就是这样的
虽然我们可以从数学上得知高斯模糊和均值模糊的区别,但是在效果上我个人觉得高斯模糊可能能比起均值模糊能更好的保留边缘信息(只是个人看法)
最后把高斯模糊的计算公式提供给数学大佬
opencv提供的API
GaussianBlur(Mat src, Mat dst, Size(11, 11), sigmax, sigmay);
其中 Size(x, y), x, y 必须是正数而且是奇数
参数 SigmaX 表示高斯方程中 X 方向的标准方差
参数 SigmaY 表示高斯方程中 X 方向的标准方差
在高斯分布中,方差可以理解为这个高斯分布的平缓程度,也就是说中间值所占比重的大小,方差越小,中间值所占比重越大,此时模糊的效果会相对更低一点(在同一个 size 下)
2、双边模糊
由于考虑到不管是均值模糊或者高斯模糊,最后的效果都是整个图像的模糊。有时候我们无需整体的模糊,而比如只模糊边缘,或者只模糊细节。
而双边模糊便是实现了对边缘信息的保留而弱化了细节。(这个效果可以用来磨皮,可以想想为啥)
实现的原理是我们确定一个数表示两个像素之间的差值的阈值,一旦两个像素之间超过了这个阈值,那么就不对这两个像素进行高斯模糊处理,一旦没有超过,就进行模糊处理。因为边缘地区的像素差值是比较大的,这样就能保留边缘的信息。
opencv提供的API
bilateralFilter(src, dest, d=15, 150, 3);
15 –计算的半径,半径之内的像数都会被纳入计算,如果提供 - 1 则根据 sigma space 参数取值
150 – sigma color 决定多少差值之内的像素会被计算
3 – sigma space 如果 d 的值大于 0 则声明无效,否则根据它来计算 d 值
3、磨皮美颜效果的实现
通过对双边模糊处理后的图像再进行对比度加深的操作,最后就是让模糊的边缘再进行加深,几乎回到原来的效果。而模糊效果去掉皮肤上的细节,从而可以让皮肤显得光滑并且颜色很有光泽。
并且我利用滑轨可以动态控制双边模糊的阈值从而让你们自己控制磨皮的效果。
#include <opencv2/imgcodecs.hpp>
#include <opencv2/highgui.hpp>
#include <opencv2/imgproc.hpp>
#include <opencv2/highgui/highgui_c.h>
#include <iostream>using namespace cv;
using namespace std;int main(int argc, char** argv)
{string path = "xxxxxxxxxxxx.jpg";Mat img = imread(path);Mat img2 = Mat::zeros(img.size(), img.type());Mat img3;Mat kernel = (Mat_<char>(3, 3) << 0, -1, 0, -1, 5, -1, 0, -1, 0);imshow("img1", img);int x = 1, y = 1;namedWindow("Trackbars", (10, 100));//新建了一个窗口--轨迹栏createTrackbar("x", "Trackbars", &x, 200);while (1){bilateralFilter(img,img2,15,x,3);imshow("img2", img2);filter2D(img2, img3, img.depth(), kernel);//src.depth()表示位图深度,和type相关imshow("img3", img3);waitKey(10); }waitKey(0);return 0;
}
效果
OpenCV 利用高斯模糊实现简单的磨皮美颜效果相关推荐
- 模糊处理(下)--高斯模糊,双边模糊以及实现一个简单的磨皮美颜效果(opencv学习记录--4)
文章目录 1.高斯模糊 1.什么是高斯模糊 2.opencv提供的API 2.双边模糊 1.什么是双边模糊 2.opencv的API 3.磨皮美颜效果的实现 1.实现过程 2.主要代码 3.效果 参考 ...
- matlab实现磨皮美颜效果
原理 matlab实现磨皮美颜效果主要是对图像进行低通滤波,滤除或大部分衰减图像的高频分量,留下其中的低频分量,使得图像可以降噪,平滑.SurfaceBlur算法也是其中一种算法,主要思想还是计算当前 ...
- 利用JS实现简单的瀑布流效果
转载:https://www.cnblogs.com/dyx-wx/p/4642637.html 一.瀑布流之准备工作 首先声明下, 为了方便演示和联系, 我使用的是本地图片, 如果大家有需要的话 ...
- C++ / Opencv 简单实现美颜效果(瘦脸、大眼、磨皮等)
最近项目需要用到美颜的一些效果,因此开始接触opencv 计算机视觉库,在腾讯课堂上找到一个简单且免费的入门视频<Opencv4 快速入门视频30讲>,看完视频后,初步才对opencv 有 ...
- python opencv 利用HSV,YUV(YCbCr)实现皮肤检测与抠图,与磨皮美颜
皮肤检测与抠图 皮肤检测的方法很多,这里写的是最简单的方法,感兴趣的同学可以自己加上椭圆检测,膨胀腐蚀等,使得检测与抠图更加精确.github上许多人脸识别的算法,可以多学习那些. HSV颜色空间 h ...
- 美颜滤镜:早已不是简单的磨皮美白
近几年来,硬件和算法的发展,让美颜多了很多新玩法.有人工智能加持的美颜滤镜,其恐怖程度,恐怕会超出你的想象. 1.人脸识别技术促进了美颜滤镜的发展 在谈论未来的美颜滤镜之前,我们先来简单回顾.总结一下 ...
- opencv 简单美颜效果
美颜效果采用:双边模糊(也称双边滤波)+掩膜操作 双边模糊bilateralFilter(src, dest, d=15, 150, 3) 15 –计算的半径,半径之内的像数都会被纳入计算,如果提供- ...
- OpenCV 学习记录7 图像实时磨皮及皮肤检测
前言 今天学习了OpenCV里一些滤波的用法,感觉获益颇深,尤其是其中的双边滤波,完全可以达到磨皮的效果,原来还很纠结要如何实现磨皮美白,原来双边滤波就行了,当然如果要保留一些细节的话可能还需要用其他 ...
- Android短视频中如何实现720P磨皮美颜录制?
视频中磨皮.美颜功能已成为刚需,那么如何在Android短视频中实现720P磨皮美颜录制?本篇文章中,网易云信资深开发工程师将向大家介绍具体的操作方法. 相关阅读推荐 <短视频技术详解:Andr ...
最新文章
- 电脑新安装JDK版本并运行使用该JDK版本问题
- 使用Dnsmasq加速苹果App Store、iCloud、iTunes、Mac更新等访问速度
- 火炬之光2找不到服务器,火炬之光2无法运行解决办法详细介绍
- 轻松搭建Google ADK开发环境
- MarshalByRefObject 的DOME代码
- 利用 jQuery 克隆 Object
- 腾讯之后,网易跟上了:未成年人每日限玩1.5小时游戏
- 深度探索Qt窗口系统——布局篇
- 对路径“bin\MySql.Data.xml”的访问被拒绝的解决方法
- pdf怎么设置密码?
- 利用tushare实现选股
- 测试工程师六大能力模型
- Office 解决WORD转PDF未显示书签。
- git拉取代码提示:本地分支 has no tracked branch
- [日常] 修改编辑word中的页眉页脚
- win7 正式版安装成功,贴图得瑟一下
- 这个简笔画很值得学,哄小孩必备
- 深度学习在点云分类中的研究综述————文献总结
- 小程序仿学习强国填空题
- 赵鹏计算机专业,赵鹏 - 安徽大学 - 计算机科学与技术学院
热门文章
- pycharm报Process finished with exit code -1073741515 (0xC0000135)
- POI 在导出的Excel中插入图片
- STOMP-WebSocket中文文档
- 苹果教你如何开发iOS应用
- EasyNVS摄像机公网全终端无插件网页摄像机直播管理服务之网页无插件直播服务搭建流程
- cmseasy(易通CMS) 注入漏洞 上传漏洞 爆路径ODAY(含修复)
- php微信公众平台session处理,php微信公众开发平台如何使用session
- 新版edge无法安全下载
- 【学习笔记】GoogleNet 网络结构
- 俯仰角,赤经赤纬,望远镜