Skip to content

About

2024 年全国大学生电子设计竞赛 E 题(三子棋对弈系统)的视觉识别部分。基于 OpenCV 实现棋盘定位、棋子检测与实时跟踪。使用MircoPython,部署在K210

Resources

Stars

1 star

Watchers

0 watching

Forks

Repository files navigation

24电赛E题 — 三子棋棋盘视觉识别

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 reportlab

使用方式

1. 检测图片中的棋盘

python img_detect.py

默认读取 board2.jpg,可通过修改脚本中的 filename 变量切换图片。运行后将弹出多个窗口展示中间处理结果(二值化、膨胀/腐蚀、掩膜等),按任意键关闭。

2. 检测视频中的棋盘

python vedio_detect.py

逐帧处理 board.mp4,按 ESC 退出。

3. 摄像头实时检测

python wecam_detect.py

调用默认摄像头(cv2.VideoCapture(0)),按 ESC 退出。如有多摄像头可修改脚本中的设备编号(0, 1, 2...)。

4. 生成棋盘 PDF

python pdf.py

生成 grid_with_border.pdf,A4 纸居中打印,九宫格净尺寸 30 mm × 30 mm,线宽 2 mm。

核心算法说明

棋盘定位

  1. HSV 色彩分割 — 将图像转换到 HSV 空间,根据预设的 HSV 范围(绿/红/灰)进行二值化
  2. 形态学处理 — 膨胀(找到棋盘整体区域)+ 腐蚀(分离出每个格子)
  3. 轮廓检测 — 取最大轮廓确定棋盘外框,用 minAreaRect 定位左上角与右上角
  4. 网格排序 — 以每个格子中心与左上角—右上角连线构成的夹角进行排序,实现 3×3 网格从左到右、从上到下的编号

棋子检测

  1. Hough 圆检测 — 在灰度图上使用 cv2.HoughCircles 检测圆形棋子
  2. 颜色判别 — 取圆心区域的灰度均值,高于阈值(默认 150)判为白棋,否则判为黑棋
  3. 排序标注 — 按从上到下、从左到右排序,分别对黑白棋子编号(b1, b2... / w1, w2...)

注意事项

  • 棋盘背景色、棋子颜色需要与 img_detect.py 中的 HSV 范围匹配(默认为绿色棋盘)
  • 光照条件变化时可能需要调整 HSV 阈值和 PieceDetector 的检测参数
  • 摄像头分辨率过低可能影响棋子检测精度,建议使用 720p 以上

About

2024 年全国大学生电子设计竞赛 E 题(三子棋对弈系统)的视觉识别部分。基于 OpenCV 实现棋盘定位、棋子检测与实时跟踪。使用MircoPython,部署在K210

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages