PyQt5 画图板
主要技术
- PyQt5
- QtDesigner
- openCV
主要功能
- 绘画
- 画笔
- 油漆桶
- 直线
- 矩形
- 椭圆
- 橡皮擦
- 图片处理
- 旋转、翻转
- 亮度、饱和度、对比度、色调调节
- 灰度化
- 二值化
- 反相(反色)
- 浮雕
- 边缘检测
- 模糊
- 锐化
详细代码
实现过程遇到的问题
在pycharm上使用qtDesigner
配置qtDesigner
配置UIC
绘图时图像不能留存或重影问题
采取双缓冲绘图方法
我们再添加一个辅助画布,如果正在绘图,也就是鼠标按键还没有释放的时候,就在这个辅助画布上绘图,只有当鼠标按键释放的时候,才在真正的画布上绘图
油漆桶Flood Fill算法问题
泛洪算法—Flood Fill,用于确定连接到多维数组中给定节点的区域。
基本原理就是从一个像素点出发,以此向周边的像素点扩充着色,直到图形的边界。
实现方法包括传统递归方式dfs、bfs和描绘线算法(Scanline Fill)等
在QImage上实现效率很低,因为getPixel操作很慢,可以进一步优化
def getPixel(x,y,pixels,w):
i = (x + (y * w)) * 4
return pixels[i:i + 3]
# 油漆桶
def floodFill(image,pos):
fillPositions = []
w, h = image.width(), image.height()
pixels = image.bits().asstring