原来程序的设想是先对照片进行人脸识别,然后对人脸进行美颜处理;

花了大时间进行了人脸分类器的训练,但是识别效果还是不理想,所先跳过人脸识别,实现美颜处理;

找到了一个PS美颜的教程http://www.jb51.net/photoshop/9715_2.html 了解到高斯模糊,深入了解;

找到了一个图像修复的函数inpaint,深入了解;

以上两个函数大致就可以实现美颜处理了,为了结合以前所学,添加了滑条交互和摄像头自拍功能,这个小项目也算是这段时间所学的汇总见证吧。

#include "opencv2/core/core.hpp"
#include"opencv2/highgui/highgui.hpp"
#include"opencv2/imgproc/imgproc.hpp"
#include<iostream>
#include<opencv2/opencv.hpp>
#include "opencv2/imgproc/imgproc.hpp"  #define TRACKBARNAME "魔法棒大小"
#define RESULT "美颜后"
#define ORIGIN "美颜前"using namespace cv;//***************************************************************//
//全局变量定义
//***************************************************************//
bool g_bDrawing = false; //鼠标点击flag
Point g_CurrPoint, g_OrgPoint;//鼠标当前位置
int g_nThick , g_nBlue = 140, g_nGreen = 140, g_nRed = 140;//线型
RNG &rng = theRNG();
Mat dst_step1;//高美颜后的图
Mat dst;//高斯模糊图
Mat mengban1;//蒙版
Mat image;   //自拍后的图像名
Mat frame;   //视频显示桢//****************************************************************//
//调用摄像头实现自拍函数
//***************************************************************//
void cameraCapture()
{char key;bool flag=1; int i = 8;//打开摄像头VideoCapture capture(0);//大循环,为了截图后继续显示摄像头实时图片while (flag){//给key一个初始值,便于循环一开始进行key = 'c';//判断key是否为空格,不为空格则循环,即显示摄像头while (key != ' '){key = cvWaitKey(10);capture >> frame;            imshow("摄像头", frame);     waitKey(3);flag = 0;}//便于观察key是否有效imwrite("image.jpg", frame);key = 'c';destroyAllWindows();}}//****************************************************************//
//滑动条改变笔触大小的回调函数
//***************************************************************//
void changePenSize(int i,void *)
{g_nThick = i;
}//****************************************************************//
//磨皮(高斯模糊)
//***************************************************************//
int GaussianBlur(){image = imread("image.jpg");int value1 = 3, value2 = 1; //磨皮程度与细节程度的确定int dx = value1 * 5;    //双边滤波参数之一  double fc = value1*12.5; //双边滤波参数之一  int p = 50; //透明度  Mat temp1, temp2, temp3, temp4;//双边滤波  bilateralFilter(image, temp1, dx, fc, fc);temp2 = (temp1 - image + 128);//高斯模糊  GaussianBlur(temp2, temp3, Size(2 * value2 - 1, 2 * value2 - 1), 0, 0);temp4 = image + 2 * temp3 - 255;dst = (image*(100 - p) + temp4*p) / 100;dst.copyTo(dst_step1); return 0;
}//***************************************************************//
//inpaint函数 手动选择杂色点
//***************************************************************//
void onMouse(int event, int x, int y, int flag, void *param)
{Mat &img = *(cv::Mat*)param;switch (event){//移动鼠标的时候case CV_EVENT_MOUSEMOVE:{                                                     g_OrgPoint = g_CurrPoint;g_CurrPoint = Point(x, y);if (g_bDrawing == 1){                line(dst_step1, g_CurrPoint, g_OrgPoint, Scalar(255), g_nThick);imshow(RESULT, dst_step1);line(mengban1, g_CurrPoint, g_OrgPoint, Scalar(255), g_nThick);}}break;//点击鼠标左键时case CV_EVENT_LBUTTONDOWN:{g_bDrawing = true;g_OrgPoint = Point(x, y);g_CurrPoint = g_OrgPoint;}break;//松开鼠标左键时case CV_EVENT_LBUTTONUP:{g_bDrawing = false;inpaint(dst_step1, mengban1, dst_step1, 3, INPAINT_NS);imshow(RESULT, dst_step1);imwrite("美颜结果图.jpg", dst_step1);}   break;}
}//***************************************************************//
//程序说明
//***************************************************************//
void Introduction()
{printf("\n\\*****************************************************************************\\\n");printf("\\*****************************************************************************\\");printf("\n\t\t\t\t自拍美颜程序!\n");printf("\n\n功能介绍:\n\n1、自动调用摄像头\n2、按下空格键实现自拍\n3、自动美颜\n4、魔法笔点击图片杂色进行自动修复");printf("\n\n\t\t\t\t谢谢您的使用!\n");printf("\\*****************************************************************************\\\n");printf("\\*****************************************************************************\\\n");
}//***************************************************************//
//主函数
//***************************************************************//
int main()
{//***************************************************************////程序说明//***************************************************************//Introduction();//***************************************************************////调用摄像头获取需要美颜的自拍//***************************************************************//cameraCapture();image = imread("image.jpg");imshow(ORIGIN, image);//***************************************************************////图像磨皮功能//***************************************************************//GaussianBlur();//***************************************************************////inpaint函数变量准备//***************************************************************////用一个变量来存储原图像 为MASK 分配空间mengban1.create(dst_step1.size(), CV_8UC1);mengban1 = Scalar::all(0);namedWindow(RESULT);setMouseCallback(RESULT, onMouse, 0);//***************************************************************////创建滑条改变笔触大小//***************************************************************//int originValue = 2;createTrackbar(TRACKBARNAME, RESULT, &originValue, 30, changePenSize);changePenSize(originValue,0);//***************************************************************////美颜后的照片//***************************************************************//imshow(RESULT, dst_step1);waitKey();        return 0;
}

每天8点下班,9点半学习到12点,断断续续学了3个礼拜,我觉得很有成就感。也是为了证明我的学习能力不必任何人差!

基于Opencv的自动美颜功能代码相关推荐

  1. php 邮件发送设置_PHP实现自动发送邮件功能代码(qq 邮箱)

    最近做一个邮箱验证的功能,研究了一会,搞定了邮件的自动发送.下面用qq邮箱作为演示,一步一步来解释: 代码下载地址 首先,就是做到邮件的发送,代码如下: //邮件发送 require "./ ...

  2. php自动发送邮件,PHP实现自动发送邮件功能代码(qq 邮箱)_php实例

    本文给大家分享以qq邮箱为例给大家介绍PHP实现自动发送邮件功能代码,感兴趣的朋友参考下吧 最近做一个邮箱验证的功能,研究了一会,搞定了邮件的自动发送.下面用qq邮箱作为演示,一步一步来解释: 代码下 ...

  3. 基于opencv的自动祛斑算法

    首先我们先来看一下详细的逻辑思路: 灰度化 对比度增强 梯度极大值查找 皮肤排除 孤立点消除 高斯模糊 阈值处理 区域表求和得到最终结果D 根据结果D与梯度最大值查找的结果对图像A里的斑点进行泊松放出 ...

  4. opencv 实现照片美颜功能 html5版(源码)

    做的一个美颜工具,可以调整磨皮系数进行图片处理.使用 opencv Javascript版本制作的,浏览器访问后,选择图片美颜即可. 1)选择本地图片 2)调整磨皮系数 3)点击"美颜处理& ...

  5. opencv 人脸识别_python基于openCV人脸识别18行代码实现

    人脸识别 一.安装 1.打开命令行,输入pip install numpy,安装numpy. 2.安装opencv. pip install opencv-python 二.实现 (1)获取人脸识别训 ...

  6. 基于Threejs火焰烟雾动画功能代码

    利用Threejs进行三维可视化的应用项目开发,我们经常回遇到需要加入一些动画效果,粒子效果等.所以本片利用此详细的例子进行介绍在Threejs中如何使用. 1,首先需要对三维场景进行初始化 func ...

  7. 基于Opencv 的 粗糙 美颜 人眼放大

    老规矩,先上图 代码: // eyebigger.cpp: 定义控制台应用程序的入口点. // #include "stdafx.h" #include<opencv2\op ...

  8. html年会抽奖代码实例,基于JavaScript实现简单抽奖功能代码实例

    为什么会做这个东西呢,纯属好玩,闲的 其实是在上次班会的时候想到的,班会的时候叫人回答问题,没人回答 当时就想,我如果抽签抽到你了,你还是不回答吗??好吧,一切都是扯淡 先来看看页面效果吧: 点击抽取 ...

  9. 【已经开源】基于opencv+pyqt的人像美容系统

    基于opencv+pyqt的美颜软件 本文禁止转载! 源码地址: 使用效果: 支持功能: 安装依赖: 下载权重: 运行代码: 关注我的公众号: 本文禁止转载! 源码地址: https://github ...

最新文章

  1. 读书笔记:php_tizag_tutorial
  2. AlwaysOn业务IP和高可用IP分开使用方案测试报告
  3. 表单如何提交后mysql_如何在表格中添加表单,并提交MYSQL数据库
  4. 剑指offer 把数组排成最小的数 atoi和itoa,pow
  5. 2020年高等数学方法与提高(上海理工大学)学习笔记:常微分方程
  6. Android加速度传感器
  7. C++ stringstream介绍,使用方法与例子
  8. indesign中调出字符样式快捷键_Word中十大黄金快捷键,你会用几个?
  9. vue2.0移除或更改的一些东西
  10. (转)Hibernate中的多表操作
  11. SAP License:SAP委外加工业务
  12. Java的“ for each”循环如何工作?
  13. [使用心得]maven2之m2eclipse使用手册之二m2eclipse功能介绍
  14. ios transporter 缓存_鸿蒙和安卓都是开源,为什么iOS系统却可以获得出色的口碑?...
  15. [xmind] ASP.NET 设计模式 - UX 用户体验
  16. [腾讯社区开放平台]介绍开放授权协议-OAuth
  17. 服务器硬件配置应如何选择?
  18. Mac OSX: 有线共享WiFi
  19. IT软件创业之 -- 电脑设备买过来都是钱,卖出去都是废铁
  20. 珞珈-B生所学 跟学笔记 PPT(一)

热门文章

  1. 话费API 洗车API接口源码分享
  2. AVX 指令集并行技术优化中值滤波
  3. 清风数学建模学习笔记——K-means聚类模型详解及SPSS操作流程
  4. 初识python之画图神器篇
  5. Unity制作 小球吃金币 游戏
  6. Ubuntu系统连接Android真机调试
  7. K8S---Pod进阶资源限制以及探针
  8. Libgdx游戏开发(1)——环境配置及demo运行
  9. 【洛谷】P1198 最大数
  10. 【Unity3D从入门到进阶】专栏文章导读清单