2024 年全国大学生电子设计竞赛 E 题(三子棋对弈系统)的视觉识别部分。基于 OpenCV 实现棋盘定位、棋子检测与实时跟踪。
| 模块 | 文件 | 说明 |
|---|---|---|
| 棋盘定位 & 棋子检测 | img_detect.py |
对单帧图像进行 HSV 色彩分割、形态学处理、轮廓检测,定位九宫格棋盘并标注棋子 |
| 棋子检测器 | piece_detector.py |
基于 Hough 圆检测 + 灰度均值判别的黑白棋子识别模块,支持图像标注 |
| PDF 棋盘生成 | pdf.py |
生成可打印的 A4 PDF 棋盘(绿底黑线,用于实物对弈) |
| 视频检测 | vedio_detect.py |
对录制视频逐帧进行棋盘与棋子检测 |
| 摄像头实时检测 | wecam_detect.py |
调用摄像头实时进行棋盘与棋子检测 |
.
├── img_detect.py # 主图像处理脚本(单帧检测入口)
├── piece_detector.py # 棋子检测类(Hough 圆检测)
├── pdf.py # PDF 棋盘生成(reportlab)
├── vedio_detect.py # 视频文件检测
├── wecam_detect.py # 摄像头实时检测
├── grid_with_border.pdf # 已生成的棋盘 PDF
├── board.mp4 # 测试视频
├── board1.jpg # 测试图片 1
├── board2.jpg # 测试图片 2
└── __pycache__/ # Python 缓存
- Python 3.10+
- OpenCV (
opencv-python) - NumPy
- ReportLab
pip install opencv-python numpy reportlabpython img_detect.py默认读取 board2.jpg,可通过修改脚本中的 filename 变量切换图片。运行后将弹出多个窗口展示中间处理结果(二值化、膨胀/腐蚀、掩膜等),按任意键关闭。
python vedio_detect.py逐帧处理 board.mp4,按 ESC 退出。
python wecam_detect.py调用默认摄像头(cv2.VideoCapture(0)),按 ESC 退出。如有多摄像头可修改脚本中的设备编号(0, 1, 2...)。
python pdf.py生成 grid_with_border.pdf,A4 纸居中打印,九宫格净尺寸 30 mm × 30 mm,线宽 2 mm。
- HSV 色彩分割 — 将图像转换到 HSV 空间,根据预设的 HSV 范围(绿/红/灰)进行二值化
- 形态学处理 — 膨胀(找到棋盘整体区域)+ 腐蚀(分离出每个格子)
- 轮廓检测 — 取最大轮廓确定棋盘外框,用
minAreaRect定位左上角与右上角 - 网格排序 — 以每个格子中心与左上角—右上角连线构成的夹角进行排序,实现 3×3 网格从左到右、从上到下的编号
- Hough 圆检测 — 在灰度图上使用
cv2.HoughCircles检测圆形棋子 - 颜色判别 — 取圆心区域的灰度均值,高于阈值(默认 150)判为白棋,否则判为黑棋
- 排序标注 — 按从上到下、从左到右排序,分别对黑白棋子编号(b1, b2... / w1, w2...)
- 棋盘背景色、棋子颜色需要与
img_detect.py中的 HSV 范围匹配(默认为绿色棋盘) - 光照条件变化时可能需要调整 HSV 阈值和
PieceDetector的检测参数 - 摄像头分辨率过低可能影响棋子检测精度,建议使用 720p 以上