在一个美颜高手那里发现一个美颜算法,他写出了数学表达式,没有给出代码,正好在研究OPENCV,顺手实现之。具体过程就是一系列矩阵运算,据说是从一个PS高手那里研究 出来的,一并表示感谢。

这是数学表达式:

Dest =(Src * (100 - Opacity) + (Src + 2 * GuassBlur(EPFFilter(Src) - Src + 128) - 256) * Opacity) /100 ;

public static Mat face2(Mat image) {

Mat dst = new Mat();

// int value1 = 3, value2 = 1; 磨皮程度与细节程度的确定

int value1 = 3, value2 = 1;

int dx = value1 * 5; // 双边滤波参数之一

double fc = value1 * 12.5; // 双边滤波参数之一

double p = 0.1f; // 透明度

Mat temp1 = new Mat(), temp2 = new Mat(), temp3 = new Mat(), temp4 = new Mat();

// 双边滤波

Imgproc.bilateralFilter(image, temp1, dx, fc, fc);

// temp2 = (temp1 - image + 128);

Mat temp22 = new Mat();

Core.subtract(temp1, image, temp22);

// Core.subtract(temp22, new Scalar(128), temp2);

Core.add(temp22, new Scalar(128, 128, 128, 128), temp2);

// 高斯模糊

Imgproc.GaussianBlur(temp2, temp3, new Size(2 * value2 - 1, 2 * value2 - 1), 0, 0);

// temp4 = image + 2 * temp3 - 255;

Mat temp44 = new Mat();

temp3.convertTo(temp44, temp3.type(), 2, -255);

Core.add(image, temp44, temp4);

// dst = (image*(100 - p) + temp4*p) / 100;

Core.addWeighted(image, p, temp4, 1 - p, 0.0, dst);

Core.add(dst, new Scalar(10, 10, 10), dst);

return dst;

}

测试代码:

Mat src2 = Imgcodecs.imread("E:/work/qqq/e.jpg");

Mat src3 = face2(src2);

Mat dest = new Mat(new Size(src2.cols()+src3.cols(), src2.rows()), src2.type());

Mat temp1 = dest.colRange(0, src2.cols());

Mat temp2 = dest.colRange(src2.cols(), dest.cols());

src2.copyTo(temp1);

src3.copyTo(temp2);

Imgcodecs.imwrite("E:/work/qqq/z3.jpg",dest);

参考:

http://www.cnblogs.com/Imageshop/p/4709710.html

http://www.cnblogs.com/Imageshop/p/3871237.html

java opencv磨皮算法_使用OPENCV简单实现具有肤质保留功能的磨皮增白算法相关推荐

  1. 使用OPENCV简单实现具有肤质保留功能的磨皮增白算法

    在一个美颜高手那里发现一个美颜算法,他写出了数学表达式,没有给出代码,正好在研究OPENCV,顺手实现之.具体过程就是一系列矩阵运算,据说是从一个PS高手那里研究 出来的,一并表示感谢. 这是数学表达 ...

  2. 简单探讨可牛影像软件中具有肤质保留功能的磨皮算法及其实现细节。

    在几年前写的一篇关于BEEP的文章时,我曾经说过Beep的去噪作用可以用于磨皮,并且给出了结论BEEP比可牛和美图等的效果要更为好,现在看来,那个结论确实是太为夸张和固定了.不同的人的审美观不同,同一 ...

  3. 简单探讨可牛影像软件中具有肤质保留功能的磨皮算法及其实现细节

    本篇博文来自博主Imageshop,打赏或想要查阅更多内容可以移步至Imageshop. 转载自:https://www.cnblogs.com/Imageshop/p/4709710.html    ...

  4. 一种具有肤质保留功能的磨皮算法

    基本原理 1.复制原图Src作为HighPass层:HighPass = Copy(Src). 2.对HighPass层磨皮(就是进行保边滤波,可以选择表面模糊.导向滤波.双边滤波.各向异性扩散.BE ...

  5. opencv python 多帧降噪算法_防抖技术 | OpenCV实现视频稳流

    在这篇文章中,我们将学习如何使用OpenCV库中的点特征匹配技术来实现一个简单的视频稳定器.我们将讨论算法并且会分享代码(python和C++版),以使用这种方法在OpenCV中设计一个简单的稳定器. ...

  6. opencv python 多帧降噪算法_实战 | OpenCV实现视频防抖

    点击上方"计算机视觉life",选择"星标" 快速获得最新干货 本文转自OpenCV学堂 这篇文章分享了一个视频防抖的策略,这个方法同样可以应用到其他领域,比如 ...

  7. opencv 检测几何图形_使用OpenCV + ConvNets检测几何形状

    opencv 检测几何图形 A simple yet powerful pipeline for detecting shapes in scanned documents 一个简单而强大的管道,用于 ...

  8. python opencv 图像切割_【OpenCV+Python】图像的基本操作与算术运算

    图像的基本操作 在上个教程中,我们介绍了使用鼠标画笔的功能.本次教程,我们将要谈及OpenCV图像处理的基本操作. 本次教程的所有操作基本上都和Numpy相关,而不是与OpenCV相关.要使用Open ...

  9. opencv 边缘平滑_基于OpenCV的车道检测实现(一)

    无人驾驶的话题日趋起热,而车道线检测对于无人驾驶的路径规划来讲特别重要.要遵守交通规则,首先的要求便是对车道线检测,而且通过检测车道线可以进一步的检测地面指示标志.进行前碰撞预警策略设计等. 早早就对 ...

最新文章

  1. sqlplus column命令用法
  2. token 生成有哪几种常用方式_实现一个线程有哪几种方式,各有什么优缺点,比较常用的是那种?...
  3. Redis几个认识误区
  4. XML文档类型定义DTD
  5. 论文浅尝 | How to Keep a Knowledge Base Synchronized
  6. Spring框架----Spring常用IOC注解的分类
  7. Android——继续深造——从安装Android Studio 2.0开始(详)
  8. Flink-1.13集成hudi-0.10.0
  9. 移动端开发—流式布局
  10. 学php什么自考专业,什么自考专业容易过自学考试哪些专业好考(已帮助356690人)...
  11. MATLAB 2018b 安装与简介
  12. Android学习笔记一
  13. 错误:Mixed Content: The page at ‘https://XXX’ was loaded over HTTPS, but requested an insecure.......
  14. BeautyGAN图片的高精度美颜
  15. 视频教程-react电影院在线选座功能-ReactJS
  16. lineageos信号叉号_安卓手机刷lineageOS后电信卡不能通话解决办法
  17. php客流量统计,智慧店铺客流量统计系统
  18. [leetcode]初级算法——动态规划
  19. 12月29日每日一题
  20. JAVA开发---微信文章留言功能实现

热门文章

  1. Java接口–历年来Java 9之旅–默认和私有方法
  2. 局部变量写在循环内还是外_循环内的局部变量和性能
  3. java 修改 枚举类字段_枚举枚举和修改“最终静态”字段的方法
  4. 信守承诺:JAX-RS API的基于合同的测试
  5. maven 父maven_Maven的鸟瞰图
  6. 抑制java对修饰符的检查_Java 7对抑制异常的支持
  7. 常见的误解:这会创建多少个对象?
  8. Apache Lucene的结构
  9. 玩Java 8 – Lambda和并发
  10. Java依赖注入选项