基于QT的opencv照片美颜及背景更换

项目地址:QT美颜系统

一、软件架构

  • qt2.9.3
  • opencv3.4.16

二、安装教程

1、将opencv源文件中的cmake文件在qt中打开,通过camke编译出qt可用的库文件,这个建议可以去看一下网上的教程;如果嫌麻烦可以直接使用本项目中编译好的库文件,但请注意你的qt版本是否和和我保持一致,如果不一致,可能会出现一些错误!

2、将opencv库文件的路径添加到qt项目中的pro文件中,注意换成你的路径,该文件为项目中opencv编译后的库文件,注意qt所有路径操作,最好不要有中文路径,否则可能会报错

INCLUDEPATH +=D:\opencv3.4.16\opencv\build-sources-Desktop_Qt_5_9_3_MinGW_32bit-Default\install\include
LIBS +=D:\opencv3.4.16\opencv\build-sources-Desktop_Qt_5_9_3_MinGW_32bit-Default\install\x64\mingw\lib\libopencv_*.a

3、在运行QT项目后,可能会出现程序直接停止,不能运行的现象,这可能是dll文件不存在的错误,打开opencv的库文件的dll文件,复制到你编译项目的debug文件,如下图所示:

三、效果展示

程序UI

效果演示

如上图六所示,因为原图的一些RGB值的不同,换背景对于一些照片中RGB近似的地方,处理效果不好,后期需要改进;但对于照片颜色差距大的照片,换背景可以完成,如图五。

四、文件介绍

  • build-Profile_picture-Desktop_Qt_5_9_3_MinGW_32bit-Debug:项目构建编译后的文件,可直接运行程序,但记得把opencv库文件添加进去,并且在pro文件中修改路径
  • opecv库文件:在qt中通过camke编译后的文件,用于项目使用opencv库函数
  • Profile_picture:项目的源文件,可以直接在该项目中进行二次修改
  • README.assets:readme图片存放文件

五、开发过程

1、通过QFileDialog选择图片,获得图片,同时转换读取图片的格式,因为opencv加载的是string类型的图片,而通过QFileDialog插入的图片是QStringe类型;最后将图片展示在QLabel上。

2、通过MatToImage()函数获取图片的类型,是单通道、三通道、四通道,并返回一个QImage类型,方便对图片进行操作。

3、通过whiteFace()函数进行亮度和对比度操作,通过三个for循环,获取每一个像素点的值,一个像素点,三通道分别对应3个值,对每一个值在0-255的数量上进行条件调节,涉及一个调节公式:g(x) = alpha * f(x) + beta;其中beta代表要调节的参数。

4、通过on_exfoliating_clicked()函数对图片进行磨皮处理,通过双边滤波和高斯滤波处理,用高斯滤波主要是考虑到双边滤波过后,图像可能会模糊,通过高斯滤波使图像增强。

5、通过on_change_background_clicked()函数,对图片进行换背景操作,主要涉及技术:K-Means,图像分割,背景融合-高斯模糊,遮罩生成;过程:数据组装,KMeans分割,背景去除,遮罩生成,遮罩模糊,通道混合输出;这个主要看网上的一些教程,本人目前没理解太透,大家可以去网上看一看

以上涉及各个函数,可以查看源码中的具体操作

六、版本更新

本地更新了UI界面的设计,采用卡片式的界面展示
并且修复了照片可能保存失败的bug

基于QT的opencv照片美颜及背景更换相关推荐

  1. windows平台下基于QT和OpenCV搭建图像处理平台

        在之前的博客中,已经分别比较详细地阐述了"windows平台下基于VS和OpenCV"以及"Linux平台下基于QT和OpenCV"搭建图像处理框架,并 ...

  2. 基于qt和opencv实现人脸识别打卡系统

    最近在学习opencv,因此就想着和QT结合起来实现一个人脸识别的系统来.下面我来给大家讲讲这个项目怎么实现的 1.项目源码 https://github.com/SagapoZ/FaceRecogn ...

  3. 基于Qt、opencv的规则工件尺寸识别

    第一步:打开摄像头 void MainWindow::on_OpenCameraBtn_clicked() {capture = cvCreateCameraCapture(0);//打开摄像头,从摄 ...

  4. 基于Qt和OpenCV的工业视觉检测APP

    主要功能 颜色识别,角度检测,数字识别,TCP通讯 主界面 包含功能:模板图片集获取,模板图片集清除,端口选择,开启端口监听,关闭端口监听,检测结果发送下位机(本次演示所用下位机为 ABB的IPB 1 ...

  5. 基于OpenCV创建视频会议虚拟背景

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本期我们将使用Python和OpenCV为视频会议创建虚拟背景. ...

  6. 基于C++的OpenCV项目实战——文档照片转换成扫描文件

    基于C++的OpenCV项目实战--文档照片转换成扫描文件 一.背景 前段时间都是基于Python的OpecCV进行一些学习和实践,但小的知识点并没有应用到实际的项目中:并且基于Python的版本的移 ...

  7. 基于QT+Opencv的红眼去除

    ** 基于QT+Opencv的红眼去除 ** 最近老师布置了一个讨论专题,是关于红眼去除,对于我一个初学者来说,当然是一脸懵了,不过还好百度上有一些资源可以 参考,在几天的了解下,也是成功完成了. 我 ...

  8. QT与openCV,与PCL结合!

    (1):详解QT多媒体框架:给予视频播放器 原文链接:http://mobile.51cto.com/symbian-271123.htm 对于使用主框架的QT程序,实现Qimage的转换可借鉴下面程 ...

  9. 【QT/C++】基于QT开发的一款A-SOUL元素的视频播放器(附源码)

    [QT/C++]基于QT开发的一款关于A-SOUL的视频播放器(附源码) 前言 一.软件使用说明 1.运行软件的界面如下 2.操作软件的步骤 二.软件设计说明 1.UI界面的设计 2.主代码中的部分函 ...

最新文章

  1. putty network error:Connection refused 乱码
  2. 《D3.js数据可视化实战手册》——2.5 使用子选择器
  3. 使用工具快速找出custom work center使用的ui component
  4. YbtOJ#20068-[NOIP2020模拟赛B组Day5]连通子图【构造】
  5. java方法的传递方式_JAVA基础--方法传参
  6. skywalking使用方法_基于SkyWalking的监控系统安装与使用教程 PDF 下载
  7. __call__方法解析
  8. c++中字符输入函数getline、cin.getline区分
  9. postman delete 请求传递数组_Postman请求方法
  10. 2021-09-01
  11. 队列的顺序存储框架搭建
  12. shell_study
  13. chatroom.php,chatRoom.php
  14. 【Taro开发】-自定义导航栏NavBar(五)
  15. 蜂窝网络版苹果iPad mini 6不支持毫米波5G
  16. Netty面试题和答案
  17. 统计双色球各个数字的中奖概率的脚本
  18. 手机android系统问题怎么解决方案,4解决Android系统崩溃问题的解决方案
  19. 星巴克2022新年限定特饮;丹麦蓝罐曲奇虎年春节礼盒;尊尼获加、督威啤酒等虎年限定 | 食品饮料新品...
  20. Windows操作系统万能Ghost全攻略

热门文章

  1. 2019最新手机号正则校验表达式
  2. 缺货商品实时监控上货提醒
  3. MSVCP140D.dll没有被指定在Windows上运行,或者它包含错误
  4. python怎么画卡通人物_Python繪制可愛的卡通人物 | 【turtle使用】
  5. 社会保障卡与应届生/工作人员/失业人员的爱恨情仇
  6. 相片打印机原理_浅谈喷墨打印机的照片输出(一)照片输出的需求与喷打在其中的地位和作用...
  7. 京东的宝贝商品主图视频如何无损的保存下来
  8. boot spring 简拼_超牛逼的下拉字典框架,支持拼音简拼搜索,代码项、代码值搜索,无限层级级联,多选、过滤自定义数据表等等...
  9. 云运维过程注意事项简单讲解-行云管家
  10. 计算机入门带进阶的目标及誓言