基于PyQt5和OpenCV的机器视觉图像处理学习平台,用于学习和实践基础图像处理算法。
- 摄像头调用 - 视频打开、暂停、关闭及单帧获取
- 图像格式转换 - RGB转灰度、RGB转HSV(手动实现算法)
- 图像读写测试 - 像素RGB值查看/修改、绘制简单图形
- 图片融合 - 透明度融合
- 颜色阈值抠图 - 基于颜色范围的掩码融合(BGR/HSV颜色空间)
- 图像校正 - 透视变换校正值斜图像(4点校正)
- 布匹裁剪分割线识别 - 基于颜色差异检测最佳裁剪位置
- 查看算法 - 每个任务均配有算法原理弹窗,方便学习
- 直接灰度变换 - 可自定义分段线性变换
- 图像直方图计算及均衡化 - 手动实现直方图均衡化算法
- 图像中值滤波 - 3×3、5×5、7×7核大小
- 低通滤波 - 添加高斯噪声、椒盐噪声并滤波
- 目标寻找 - 圆形区域检测并标注
- 开发语言: Python 3.8+
- GUI框架: PyQt5
- 图像处理库: OpenCV
- 辅助库: NumPy, Matplotlib
pip install -r requirements.txtpython main.pyCVsystem/
├── main.py # 程序入口
├── requirements.txt # 依赖包列表
├── ui/ # UI模块
│ ├── __init__.py
│ ├── main_window.py # 主窗口
│ ├── experiment1.py # 实验一窗口
│ ├── experiment2.py # 实验二窗口
│ └── styles.py # 统一样式
├── core/ # 核心处理模块
│ ├── __init__.py
│ ├── image_processor.py # 图像处理核心算法
│ └── camera.py # 摄像头处理
└── utils/ # 工具模块
├── __init__.py
└── helpers.py # 辅助函数
- 启动程序后,从顶部菜单选择 实验(实验一或实验二)
- 选择实验后,再选择具体的 任务
- 系统会打开对应的实验窗口,左侧显示该任务的功能按钮
- 根据任务需要加载图像或打开摄像头
- 调整左侧参数并点击相应按钮预览效果
- 使用 导出结果 保存处理后的图像
- 点击 查看算法 按钮学习该任务的算法原理
- 顶部工具栏: 实验选择、任务选择
- 左侧控制面板: 当前任务的功能参数调整区(宽度300px)
- 右侧图像区域:
- 上方显示原始图像
- 下方显示处理后图像
- 加载值斜的图像(如拍摄角度不正的文档、票据)
- 按顺序点击图像上值斜矩形的4个角点(左上、右上、右下、左下)
- 系统自动计算透视变换矩阵并将图像摆正
- 加载布匹图片(特别适合有褥皱或拼接的布料)
- 点击“识别分割线”按钮
- 系统基于颜色差异分析,自动检测并标记:
- 红色粗线:主分割线(推荐裁剪位置)
- 黄色细线:辅助参考线(颜色变化点)
- 加载前景图片和背景图片
- 选择颜色空间(BGR或HSV)
- 调整颜色阈值范围
- 点击“生成掩码”预览选中区域
- 点击“应用抠图融合”完成抠图
本项目的核心图像处理算法均基于原理手动实现,不直接使用OpenCV的内置转换函数:
- RGB转灰度: 使用加权平均公式
Gray = 0.299*R + 0.587*G + 0.114*B - RGB转HSV: 实现完整的HSV颜色空间转换算法
- 直方图均衡化: 手动计算累积分布函数(CDF)并映射
- 中值滤波: 逐像素窗口中值计算
- 分段线性变换: 基于用户定义的控制点进行灰度映射
- 透视变换: 使用
cv2.getPerspectiveTransform计算变换矩阵,将4个值斜点映射为矩形 - 布匹分割线检测: 基于灰度梯度分析,检测颜色突变区域
每个任务都配备了 "查看算法"按钮,点击后弹窗显示:
- 算法原理和数学公式
- 实现步骤详细说明
- 核心代码片段
- 应用场景介绍
支持查看算法的任务:
- 摄像头调用(OpenCV VideoCapture + PyQt5线程)
- RGB转Gray(加权平均算法)
- RGB转HSV(颜色空间转换)
- 图像读写(像素操作、图形绘制)
- 图像融合(Alpha混合)
- 颜色阈值抠图(掩码融合)
- 图像校正(透视变换)
- 布匹裁剪分割(梯度检测)
- 首次运行前请确保已安装所有依赖包
- 摄像头功能需要系统有可用的摄像头设备
- 中值滤波在大核和大图像时可能较慢,请耐心等待
- 所有窗口保持统一的GitHub浅色主题风格
- 图像显示区域固定大小(1000×380px),过大的图像会自动缩放
- 图像校正功能:需要按顺序点击4个角点(左上、右上、右下、左下),点击错误请使用“重置点”按钮
- 颜色阈值抠图:建议使用HSV颜色空间处理绿幕等特定颜色,BGR适合粗略调整
- 布匹分割线检测:算法会自动识别颜色变化最显著的区域,黄色线仅供参考
- Windows 10/11
- Python 3.8+
- PyQt5 5.15+
- OpenCV 4.8+
本项目仅用于教学和学习目的。