基于OpenCv的照片美化工具的设计与实现

Posted weixin_40228600

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于OpenCv的照片美化工具的设计与实现相关的知识,希望对你有一定的参考价值。

随着我们对美好事物的向往,追求更美的自己,尤其是在手机拍照时,更能体现,现在不同的手机拍出的效果截然不同,像华为手机拍照拍出的就特别的清晰,opp手机拍出的效果就非常的柔和,像小米手机拍出的效果就非常的艳丽,这些产生不同的因素变化都是因为他们彼此采用的算法技术不同,所以反映的效果也就不一样。
本文主要通过在Microsoft Visual C++编译环境下,采用OpenCV和QT的技术,来设计一款图像处理软件。软件主要界面功能包括文件操作、视图操作、图像效果、图形检测、绘图工具等功能。第二层界面主要显示处理后的图像。中文操作包括各种图像文件的读取、转换、保存等功能:尝试操作包括工具栏状态栏和显示栏的显示;图像效果包括羽毛、雕刻、浮雕等特效:图像检测包括各种边缘检测算法和线性检测和线性变换算法:画笔工具包括直线、矩形、椭圆和曲线绘制。
本文从图像处理软件的背景入手,介绍了图像处理软件的总体设计、软件操作和实现。在软件开发过程中,采用统一建模语言UL对图像处理软件进行开发和建模;在Visual Studio 2018平台上使用MFC进行开发,然后使用VC +和opencv库进行编程,实现了本课题的基本要求。

关键词:照片美化处理;OpenCV;QT

Design and implementation of firmware based on MCU
Abstract
Along with our yearning for good things, the pursuit of a better yourself, especially when you take a photo on the phone, can reflect more, now the effect of the different mobile phone clap a completely different, like huawei mobile phones out of taking photos is particularly clear, opp phone patted the effect is very soft, like millet mobile phone patted the effect is very gorgeous, all of these different factors change because they are different each other algorithm technique, so reflect the effect is not the same.
This article mainly through the Microsoft Visual C++ compilation environment, using OpenCV and QT technology, to design an image processing software. The main interface functions of the software include file operation, view operation, image effect, graphic detection, drawing tools and other functions. The second layer mainly displays processed images. Chinese operation includes various image file reading, conversion, save and other functions: try operation including toolbar status bar and display bar display; Image effects include feathers, engraving, relief and other special effects; Image detection includes a variety of edge detection algorithms and linear detection and linear transformation algorithms; Brush tools include line, rectangle, ellipse and curve drawing.
Starting from the background of the image processing software, this paper introduces the overall design, software operation and implementation of the image processing software. In the process of software development, the Unified Modeling Language (UL) is used to develop and model image processing software. In Visual Studio 2018 platform using MFC development, and then use VC + and OpenCV library programming, to achieve the basic requirements of this topic.

Key Words: photo beautification; OpenCV. QT

目 录

中文摘要与关键词……………………………………………………………………I
Abstract and Key Words……………………………………………………………Ⅱ
引言……………………………………………………………………………………1
1 绪论 1
1.1系统开发的背景 1
1.2系统开发意义 1
1.3主要的内容 2
2 关键技术介绍及开发环境 2
2.1 关键技术介绍 2
2.1.1 Studio 2
2.1.2 MFC 2
2.1.3 Platform SDK 3
2.1.4 OpenCV 3
2.2 Visual Studio 4
2.3 开发环境 5
2.3.1 MFC 5
3 系统总体设计 5
3.1系统框架结构 5
3.2 Flash的划分方式 5
3.3系统流程图设计 5
4 系统界面设计和功能实现 7
4.1系统界面设计 7
4.1.1系统设计界面的定义: 7
4.2 裁剪图片 7
4.2.1裁剪图片的定义: 7
4.3 图片对比度/亮度调节 8
4.3.1图片对比度/亮度调节的定义: 8
4.4 图片去噪 10
4.4.1图片去噪的定义: 10
5 功能实现 12
5.1 各个模块对图像处理系统的实现 12
5.2 系统测试 14
5.2.1测试环境 14
5.2.2功能测试用例 14
5.2.2.1亮度对比度调节用例 14
5.2.2.2去噪用例 15
6 .结语 15
参考文献 16
致 谢 17
附录1 18
附录2 18
附录3 程序 18

引 言
随着计算机技术的高速发展,数字图像处理技术已经从各个方面影响着我们的生活。因为图像不仅直观,而且信息量大,现在被广泛的使用在太空、军事、生物医学等图像视觉领域。
数字图像处理又称计算机图像处理,是指将图像信号转换为数字信号,再由计算机进行处理的过程。随着时代的变迁。计算机处理图形和图像信息越来越广泛。人们对于他的实用要求也越来越高。以前低质量的图片是无法转换成高质量清晰的图片,现在通过图像算法处理,可将低质量的图像,转换成高质量的图像输出,让图片变得更加清晰;现在常用的图像处理方法有增强、恢复、编码、压缩等。
1 绪论
随着计算机技术的高速发展,数字图像处理技术已经从各个方面影响着我们的生活。因为图像不仅直观,而且信息量大,现在被广泛的使用在太空、军事、生物医学等图像视觉领域。
数字图像处理又称计算机图像处理,是指将图像信号转换为数字信号,再由计算机进行处理的过程。随着时代的变迁。计算机处理图形和图像信息越来越广泛。人们对于他的实用要求也越来越高。以前低质量的图片是无法转换成高质量清晰的图片,现在通过图像算法处理,可将低质量的图像,转换成高质量的图像输出,让图片变得更加清晰;现在常用的图像处理方法有增强、恢复、编码、压缩等。
1.1系统开发的背景
现在世面上比较成熟的图像处理软件特别多,但最有代表性的软件,还属potoshop软件,他基本上涵盖了所有图像处理的算法,但对于初学者来说,掌握它的部分功能有一定的借鉴性。其实每个软件都有他特殊环境的应用,像potoshop软件适合于有一定基础,对图像处理有一定认识的人,而有些图片我们只需小小的功能,比方模糊算法或者图像调色,这时我们只需要设计一个小软件就能轻松搞定,本项目的初衷就是满足一小部分群体对于图像处理的要求。
1.2系统开发意义
本软件将是一个简单而便携的图像处理工具,针对potoshop软件功能,提取一些常见的功能,这样可帮助我们的电脑节省大量的磁盘空间和内存的消耗。此外,也可以快速的掌握VC +或opencv库的实用。

1.3主要的内容
从设计软件角度来分析,本文主要从以下几个章节来介绍:一是软件开发背景和意义,二是关键技术介绍及平台开发环境,三是图像处理软件的分析和设计,包括软件功能分析、软件用例场景分析、软件流程分析;四是对软件进行评估测试;五是总结。

2 关键技术介绍及开发环境
2.1 关键技术介绍
Vc+是 Microsoft Visual C++的简称,亦是微软公司的C++开发工具,具有集成开发环境,可提供编辑C语言,C++以及C+/CLI等编程语言,是一个功能强大的可视化软件开发工具。VC+整合了便利的除错工具,特别是整合了微软视窗程式设计( Windows API)、三维动画 Directx API, Microsoft,NET框架。它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2, Winsock网络、3D控制界面。[2]自1993年 Microsoft公司推出 Visual c+1.0后,随着其新版本的不断问世, Visual++已成为专业程序员进行软件开发的首Visual C+t它大概可以分成三个主要的部分:
2.1.1 Studio
这是一个集成开发环境,我们日常工作的99%都是在它上面完成的,再加上它的标题赫然写着“ Microsoft Visua1C++”,所以很多人理所当然的认为,那就是 Visual C+了。[3]其实不然,虽然 Developer Studio提供了个很好的编辑器和很多 Wizard,但实际上它没有任何编译和链接程序的功能,真正完成这些工作的幕后英雄后面会介绍。我们也知道, Developer Studio并不是专门用于VC的,它也同样用于VB,VJ,VID等 Visual Studio家族的其他同胞兄弟.
2.1.2 MFC
MFC,从理论上来讲,MFC也不是专用于 Visual C+,其他语言诸如 Borland C+,C++ Builder和 Symantec C同样可以处理MFC.同时,用 Visualc编写代码也 并不意味着一定要用MFC,只要愿意,用 Visualc++来编写SDK程序,或者使用STL,ATL,一样没有限制。不过, Visual++本来就是为MFC打造的,Visual C中的许多特征和语言扩展也是为MFC而设计的,所以用 Visualc++而不用MC就等于抛弃了 Visual C++中很大的一部分功能。
2.1.3 Platform SDK
Platform SDK,这才是 Visua1C+和整个 Visual Studio的精华和灵魂,虽然我们很少能直接接触到它。大致说来, Platform SDK是以 Microsoft C/C+编译器为核心(不是 Visual C,看清楚了),配合MASM,辅以其他一些工具和文档资料。上面说到 Developer Studio没有编译程序的功能,那么这项工作是由谁来完成的呢?是CL,是MAKE,和其他许许多多命令行程序,这些我们看不到的程序才是构成 Visual Studio的基石。
2.1.4 OpenCV
OpenCV是一个用于图像处理、分析、机器视觉方面的开源函数库. 无论你是做科学研究,还是商业应用,opencv都可以作为你理想的工具库,因为,对于这两者,它完全是免费的。 该库采用C及C++语言编写,可以在windows, linux, mac OSX系统上面运行。该库的所有代码都经过优化,计算效率很高,因为,它更专注于设计成为一种用于实时系统的开源库。opencv采用C语言进行优化,而且,在多核机器上面,其运行速度会更快。它的一个目标是提供友好的机器视觉接口函数,从而使得复杂的机器视觉产品可以加速面世。该库包含了横跨工业产品检测、医学图像处理、安防、用户界面、摄像头标定、三维成像、机器视觉等领域的超过500个接口函数。 同时,由于计算机视觉与机器学习密不可分,该库也包含了比较常用的一些机器学习算法。或许,很多人知道,图像识别、机器视觉在安防领域有所应用。但,很少有人知道,在航拍图片、街道图片(例如google street view)中,要严重依赖于机器视觉的摄像头标定、图像融合等技术。 近年来,在入侵检测、特定目标跟踪、目标检测、人脸检测、人脸识别、人脸跟踪等领域,opencv可谓大显身手,而这些,仅仅是其应用的冰山一角。 如今,来自世界各地的各大公司、科研机构的研究人员,共同维护支持着opencv的开源库开发[4]。
Microsoft Visual Studio(简称VS)是美国微软公司的开发工具包系列产品。VS是一个基本完整的开发工具集,它包括了整个软件生命周期中所需要的大部分工具,如UML工具、代码管控工具、集成开发环境(IDE)等等。所写的目标代码适用于微软支持的所有平台,包括[Microsoft Windows](https://baike.baidu.com/item/Microsoft Windows)、Windows Mobile、[Windows CE](https://baike.baidu.com/item/Windows CE)、[.NET Framework](https://baike.baidu.com/item/.NET Framework)、.NET Compact Framework和Microsoft Silverlight 及Windows Phone。Visual Studio是最流行的Windows平台应用程序的集成开发环境,目前最新版本为 Visual Studio 2019 版本,这里以Visual Studio 2019为例。
2.2 Visual Studio
Visual Studio1998 年,微软发布了 Visual Studio 6.0。所有开发语言的开发环境版本均升至 6.0。这也是 Visual Basic 最后一次发布,从下一个版本 (7.0) 开始,Microsoft Basic 进化成了一种新的面向对象的语言:Microsoft Basic .NET 2002。由于微软公司对于 Sun 公司 Java 语言扩充导致与 Java虚拟机不兼容被 Sun 告上法庭,微软在后续的 Visual Studio 中不再包括面向 Java 虚拟机的开发环境。[6]
2002 年,随着 .NET 口号的提出与 Windows XP/Office XP 的发布,微软发布了 Visual Studio .NET(内部版本号为 7.0)。在这个版本的 Visual Studio 中,微软剥离了 Visual FoxPro 作为一个单独的开发环境以 Visual FoxPro 7.0 单独销售,同时取消了 Visual InterDev。与此同时,微软引入了建立在 .NET 框架上(版本1.0)的托管代码机制以及一门新的语言C#(读作 C Sharp)。C# 是一门建立在C++和 Java 基础上的现代语言,是编写 .NET 框架的语言。
.NET的通用语言框架机制(Common Language Runtime, CLR),其目的是在同一个项目中支持不同的语言所开发的组件。所有 CLR 支持的代码都会被解释成为 CLR 可执行的机器代码然后运行。
.NET控件 [1] 是指以输入或操作数据的对象。.NET控件是.NET平台下对数据和方法的封装。有自己的属性和方法。属性是控件数据的简单访问者。方法则是控件的一些简单而可见的功能。过去,开发人员将 C/C++ 与 Microsoft 基础类 (MFC) 或应用程序快速开发 (RAD) 环境(如 Microsoft ® Visual Basic™)一起使用来创建这样的应用程序。.NET Framework 将这些现有产品的特点合并到了单个且一致的开发环境中,该环境大大简化了客户端应用程序的开发。包含在 .NET Framework 中的 Windows 窗体类旨在用于 GUI 开发。您可以轻松创建具有适应多变的商业需求所需的灵活性的命令窗口、按钮、菜单、工具栏和其他屏幕元素。
Visual Basic、Visual C++ 都被扩展为支持托管代码机制的开发环境,且Visual Basic .NET更是从 Visual Basic 脱胎换骨,彻底支持面向对象的编程机制。而 Visual J++ 也变为 Visual J#。后者仅语法同 Java 相同,但是面向的不是 Java虚拟机,而是 .NET Framework。
2003 年,微软对 Visual Studio 2002 进行了部分修订,以 Visual Studio 2003 的名义发布(内部版本号为 7.1)。Visio 作为使用统一建模语言(UML)架构应用程序框架的程序被引入,同时被引入的还包括移动设备支持和企业模版。.NET 框架也升级到了 1.1。
2005 年,微软发布了 Visual Studio 2005。.NET 字眼从各种语言的名字中被抹去,但是这个版本的 Visual Studio 仍然还是面向 .NET 框架的(版本2.0)。 [1]
这个版本的 Visual Studio 包含有众多版本,分别面向不同的开发角色。同时还永久提供免费的 Visual Studio Express 版本。
2.3 开发环境
微软基础类库(英语:Microsoft Foundation Classes,简称MFC)是微软公司提供的一个类库(class libraries),以C++类的形式封装了Windows API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。
2.3.1 MFC
MFC(Microsoft Foundation Classes)是微软基础类库的简称,是微软公司实现的一个c++类库,主要封装了大部分的windows API函数,vc++是微软公司开发的c/c++的集成开发环境,所谓集成开发环境,就是说利用它可以编辑,编译,调试,而不是使用多种工具轮换操作,灵活性较大。vc也指它的内部编译器,集成开发环境必须有一个编译器内核,例如DevC++其中一个编译器内核就是gcc。 MFC除了是一个类库以外,还是一个框架,在vc++里新建一个MFC的工程,开发环境会自动帮你产生许多文件,同时它使用了mfcxx.dll。xx是版本,它封装了mfc内核,所以你在你的代码看不到原本的SDK编程中的消息循环等等东西,因为MFC框架帮你封装好了,这样你就可以专心的考虑你程序的逻辑,而不是这些每次编程都要重复的东西,但是由于是通用框架,没有最好的针对性,当然也丧失了一些灵活性和效。但是MFC的封装很浅,所以效率上损失不大。[7]
3 系统总体设计
3.1系统框架结构
该设计的系统主要有两大模块主控模块和显示功能模块,主模块的作用负责系统整体功能实现,接受指令,并将图像进行处理,相对于系统的核心;显示模块就是用户模块,负责系统处理完指令后,显示图像信息。
3.2 Flash的划分方式
系统设计的功能包含文件的处理、二值图像处理等。文件处理包括打开、恢复图像,关闭、保存当前窗口及位图,将处理后的图像恢复为原始图像等功能,该图像支持多种读取的格式,包括常用的png、jpg、gif图片;二值图像处理是用户选择某一个阀值,通过阀值的变化将图片变换未黑白两色。
3.3系统流程图设计
系统流程图如图所示:在这里插入图片描述
4 系统界面设计和功能实现
4.1系统界面设计
4.1.1系统设计界面的定义:
图像涉及的处理算法有多种,根据不同的需要业务需要,可以分为柔顺、边缘检测、镜像模糊、增强行等等,这些操作都可以调用OpenCV函数来实现。
系统设计界面的程序:
系统设计界面实现的图片:在这里插入图片描述
图2 系统设计界面图
Fig. 2 Pin figure

4.2 裁剪图片
4.2.1裁剪图片的定义:
裁剪图片程序:
void ImageBeautify::imageCrop( const QRect &rect )
{
//裁剪功能
cv::Mat dst =imageMatBGR( cv::Rect( rect.x(), rect.y(), rect.width(), rect.height() ) );
imageBGR2RGB( dst );
}

void ImageBeautify::imageBGR2RGB( const cv::Mat &dst )
{
cv::cvtColor( dst, imageMatRGB, CV_BGR2RGB );
QImage img( (uchar*)imageMatRGB.data , imageMatRGB.cols, imageMatRGB.rows,
imageMatRGB.step1(), QImage::Format_RGB888 );
pixmap = QPixmap::fromImage(img);
}
裁剪图片功能实现的图片:

图3 裁剪图片功能实现的图
Fig. 3 Pin figure

4.3 图片对比度/亮度调节
4.3.1图片对比度/亮度调节的定义:
图片对比度/亮度调节程序:
void ImageBeautify::imageCrop( const QRect &rect )
{
//裁剪功能
cv::Mat dst =imageMatBGR( cv::Rect( rect.x(), rect.y(), rect.width(), rect.height() ) );
imageBGR2RGB( dst );
}

void ImageBeautify::imageBGR2RGB( const cv::Mat &dst )
{
cv::cvtColor( dst, imageMatRGB, CV_BGR2RGB );
QImage img( (uchar*)imageMatRGB.data , imageMatRGB.cols, imageMatRGB.rows,
imageMatRGB.step1(), QImage::Format_RGB888 );
pixmap = QPixmap::fromImage(img);
}
图片对比度/亮度调节功能实现的图片:在这里插入图片描述
图4 对比度/亮度调节功能实现图
Fig. 4Pin figure
4.4 图片去噪
4.4.1图片去噪的定义:
图片去噪程序:

void ImageBeautify::gammaCorrect( float gamma )
{
// Mat dst;
// Mat lookupTable( 1, 256, CV_8U );
// uchar *p = lookupTable.ptr();
// for( int i = 0; i < 256; i++ ){
// p[i] = saturate_cast( pow(i/255.0,gamma)*255.0);
// }
// LUT( img, lookupTable, dst );
// Mat2Pixmap( dst );
}

void ImageBeautify::denoisingFastNlMeans()
{
//非局部滤波
cv::Mat dst;
cv::fastNlMeansDenoisingColored( imageMatBGR, dst, 10, 10 );
imageBGR2RGB( dst );
}

void ImageBeautify::denoisingBlur()
{
//均值滤波
cv::Mat dst;
blur( imageMatBGR, dst, Size(5, 5));
imageBGR2RGB( dst );
}

void ImageBeautify::denoisingGaussian()
{
//高斯滤波
cv::Mat dst;
cv::GaussianBlur( imageMatBGR, dst, Size(5, 5), 0);
imageBGR2RGB( dst );
}

void ImageBeautify::denoisingMedian()
{
//中值滤波
cv::Mat dst;
cv::medianBlur( imageMatBGR, dst, 5 );
imageBGR2RGB( dst );
}

图片去噪后的功能实现的图片:在这里插入图片描述
基于OpenCv的照片美化工具的设计与实现:下载地址请点击》》》

以上是关于基于OpenCv的照片美化工具的设计与实现的主要内容,如果未能解决你的问题,请参考以下文章

Python 基于OpenCV+face_recognition实现人脸捕捉与人脸识别(照片对比)

Python给照片换底色,基于opencv模块

基于RGB颜色空间使用OpenCV-Python实现照片换底

使用 Open CV 更改照片中的 Powerpoint 幻灯片

基于html汽车商城网站页面设计与实现.rar共计页面30+(毕业设计+毕业源码+答辩PPT)

[OpenCV实战]19 使用OpenCV实现基于特征的图像对齐