Skip to content

yang-han/GraphicsEditor

Repository files navigation

Graphics Editor

0. Build Requirements

如果你想自己编译此项目,你需要:

  • QT version 5.9+
  • OpenCV 3.2.0 (with OpenCV_contrib

所需的人脸识别的训练好的模型因为文件过大无法传到github,可于http://osawfig85.bkt.clouddn.com/MyFacePCAModel.xml 以及http://osawfig85.bkt.clouddn.com/lbpcascade_frontalface.xml 下载。

编译后注意model.cpp中关于模型路径要正确才能正确使用。

1. 需求分析

本项目实现了一个图片编辑器。

对于一张并不满意图片,通常要进行的基本调整有亮度/对比度的调整、旋转/裁剪、滤镜等操作。如果使用Photoshop打开则显得过于臃肿,加载缓慢切使用门槛较高。

本项目的目的在于事先一个轻量级的图像调整工具,具有图像编辑的所有基本操作,能让用户在快速轻量简易的体验中完成自己的编辑需求。

2. 功能实现

  • 导入打开图片
  • 调整对比度
  • 调整亮度
  • 裁剪
  • 旋转
  • 滤镜
  • 人脸检测

3. 项目概况

本项目基于QT5.9OpenCV3.2实现。

整体架构基于MVVM(Model-View-ViewModel)实现。

在开发过程中,使用了jenkins-CI工具实现了持续交互。

整体代码相对干净,如果你有意进行二次开发,可以看下面的介绍。

4. 二次开发

每实现一个新功能需要增加一个对应的command类,command本身存在于ViewModel中,并提供get方法给View层进行set方法实现绑定,从而事先View->ViewModel的通信。

ViewModel执行Command的过程是调用Model中对应方法进行数据操作的过程。

在Model层完成数据操作之后,通过一个通知(绑定方式类似于command)来实现model与ViewModel的通信。

在此之后,ViewModel通过通知告诉View更新显示窗口。

二次开发只需增加相应的Command类并在model中实现功能,并讲command和notification绑定好即可。

5. 项目目录

.
├── App
│   ├── app.cpp
│   └── app.h
├── Commands
│   ├── aeroglass.cpp
│   ├── aeroglass.h
│   ├── alter_bright_command.cpp
│   ├── alter_bright_command.h
│   ├── command.cpp
│   ├── command.h
│   ├── crop_command.cpp
│   ├── crop_command.h
│   ├── detect_face_command.cpp
│   ├── detect_face_command.h
│   ├── filter_command.cpp
│   ├── filter_command.h
│   ├── open_file_command.cpp
│   ├── open_file_command.h
│   ├── reset_command.cpp
│   ├── reset_command.h
│   ├── rotate_command.cpp
│   ├── rotate_command.h
│   ├── save_bmp_command.cpp
│   ├── save_bmp_command.h
│   ├── save_file_command.cpp
│   └── save_file_command.h
├── common
│   ├── common.cpp
│   └── common.h
├── docs
│   ├── 个人心得_A.md
│   ├── 个人心得_B.md
│   ├── 个人心得_C.md
│   └── 个人心得_D.md
├── GraphicsEditor.pro
├── GraphicsEditor.pro.user
├── LICENSE
├── main.cpp
├── Model
│   ├── model.cpp
│   └── model.h
├── Notification
│   ├── notification.cpp
│   └── notification.h
├── Parameters
│   ├── parameters.cpp
│   └── parameters.h
├── README.md
├── View
│   ├── MyView.cpp
│   ├── MyView.h
│   ├── view.cpp
│   ├── view.h
│   └── view.ui
└── ViewModel
    ├── viewmodel.cpp
    └── viewmodel.h

9 directories, 48 files

6. 框架介绍

较详细介绍在博客中。

整体流程

View层进行操作之后,会触发对应槽函数,该槽函数会准备好参数Parameter交给对应的Command,然后执行exec()这个command,exec会解出参数交给ViewModel层,ViewModel调用Model里对应的方法,进行数据操作,Model操作完之后会通知ViewModel更新显示数据,ViewModel会通知View刷新显示。