PyQt5 画图板
主要技术
- PyQt5
- qtDesigner
- openCV
主要功能
- 绘画
- 画笔
- 油漆桶
- 直线
- 矩形
- 椭圆
- 橡皮擦
- 图片处理
- 旋转、翻转
- 亮度、饱和度、对比度、色调调节
- 灰度化
- 二值化
- 反相(反色)
- 浮雕
- 边缘检测
- 模糊
- 锐化
详细代码
实现过程遇到的问题
在pycharm上使用qtDesigner
配置qtDesigner
配置UIC
绘图时图像不能留存或重影问题
采取双缓冲绘图方法
我们再添加一个辅助画布,如果正在绘图,也就是鼠标按键还没有释放的时候,就在这个辅助画布上绘图,只有当鼠标按键释放的时候,才在真正的画布上绘图
油漆桶Flood Fill算法问题
泛洪算法—Flood Fill,用于确定连接到多维数组中给定节点的区域。
基本原理就是从一个像素点出发,以此向周边的像素点扩充着色,直到图形的边界。
实现方法包括传统递归方式dfs、bfs和描绘线算法(Scanline Fill)等
在QImage上实现效率很低,因为getPixel操作很慢,可以进一步优化
1 | def getPixel(x,y,pixels,w): |
参考Implementing QPainter flood fill in PyQt5/PySide
Mac上pyqt5 与 cv库冲突问题
问题You might be loading **two sets of Qt binaries** into the same process
删除原有的opencv
pip3 uninstall opencv-python
安装opencv–headless版本
pip3 install opencv-contrib-python-headless
pyqt QImage 与opencv MAT格式转化问题
在使用opencv过程中需要传入QImage对象进行处理
QImage转化成opencv下的 MAT(numpy ndarray) 对象
1 | def CvMatToQImage(cvMat): |
MAT(numpy ndarray) 转QImage
1 | def QImageToCvMat(incomingImage): |
参考Python 中如何将 Pyqt5 下的 QImage 对象转换成 PIL image 或 opencv MAT (numpy ndarray) 对象
效果预览
绘画
油漆桶效果
图像处理部分展示
原图
亮度调节
色调调节
反相
灰度化
二值化
边缘检测
部分参考
https://www.cnblogs.com/lfri/p/10599420.htmlhttps://blog.csdn.net/qq_43444349/article/details/106602543
https://www.pianshen.com/article/172962944/
https://blog.csdn.net/lzwarhang/article/details/93209166