如果你想自己编译此项目,你需要:
- 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
中关于模型路径要正确才能正确使用。
本项目实现了一个图片编辑器。
对于一张并不满意图片,通常要进行的基本调整有亮度/对比度的调整、旋转/裁剪、滤镜等操作。如果使用Photoshop
打开则显得过于臃肿,加载缓慢切使用门槛较高。
本项目的目的在于事先一个轻量级的图像调整工具,具有图像编辑的所有基本操作,能让用户在快速轻量简易的体验中完成自己的编辑需求。
- 导入打开图片
- 调整对比度
- 调整亮度
- 裁剪
- 旋转
- 滤镜
- 人脸检测
本项目基于QT5.9
和OpenCV3.2
实现。
整体架构基于MVVM
(Model-View-ViewModel
)实现。
在开发过程中,使用了jenkins-CI
工具实现了持续交互。
整体代码相对干净,如果你有意进行二次开发,可以看下面的介绍。
每实现一个新功能需要增加一个对应的command
类,command本身存在于ViewModel中,并提供get方法给View层进行set方法实现绑定,从而事先View->ViewModel的通信。
ViewModel执行Command的过程是调用Model中对应方法进行数据操作的过程。
在Model层完成数据操作之后,通过一个通知(绑定方式类似于command)来实现model与ViewModel的通信。
在此之后,ViewModel通过通知告诉View更新显示窗口。
二次开发只需增加相应的Command类并在model中实现功能,并讲command和notification绑定好即可。
.
├── 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
较详细介绍在博客中。
在View
层进行操作之后,会触发对应槽函数,该槽函数会准备好参数Parameter
交给对应的Command
,然后执行exec()
这个command,exec会解出参数交给ViewModel
层,ViewModel
调用Model
里对应的方法,进行数据操作,Model
操作完之后会通知ViewModel
更新显示数据,ViewModel
会通知View
刷新显示。