You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

基于已知场景自动检测HSV值及桌游棋子识别技术问询

双陆棋棋子检测与颜色拾取问题解决方案

1. 已知校准配置能否实现自动检测?

完全可以,基于校准的规则化检测是这类场景的高效方案,具体执行步骤如下:

  • 校准阶段:让用户点击棋盘空白三角区、白棋、黑棋各1-2个样本,记录每个目标的HSV颜色区间(或RGB基准值+容差),同时记录棋盘12个三角区域的坐标范围(双陆棋布局固定,校准一次即可复用)。
  • 检测阶段:
    1. 依据校准记录定位整个棋盘区域;
    2. 分割出每个三角区域的子图像;
    3. 用校准得到的颜色区间对每个子图像做inRange掩码,统计掩码内像素占比;
    4. 结合三角区域的规则(比如单区域最大棋子数),判断该区域是否有棋子、属于哪种颜色。
  • 补充优化:配合形态学操作(膨胀dilate+腐蚀erode)过滤掩码噪声,提升检测稳定性。

2. 如何实现图像颜色拾取功能?

你之前的代码错误在于直接对SelectROI返回的Rect结构体调用颜色方法,正确做法是从原始图像的对应坐标提取像素。以下是GoCV的正确实现:

// 假设originalImage为gocv.Mat类型
selected := gameWindow.SelectROI(originalImage)
// 计算ROI中心坐标
centerX := (selected.Min.X + selected.Max.X) / 2
centerY := (selected.Min.Y + selected.Max.Y) / 2

// 方式1:提取BGR像素并手动转HSV
bgrPixel := originalImage.GetVecb(centerY, centerX) // OpenCV默认BGR通道顺序
b := float64(bgrPixel[0])
g := float64(bgrPixel[1])
r := float64(bgrPixel[2])
// 归一化到0-1后转HSV
h, s, v := rgbToHsv(r/255, g/255, b/255)
fmt.Printf("拾取颜色HSV: %.2f, %.2f, %.2f\n", h*360, s*100, v*100)

// 方式2:用GoCV内置颜色转换函数
hsvMat := gocv.NewMat()
defer hsvMat.Close()
// 截取ROI并转HSV
gocv.CvtColor(originalImage.Region(selected), &hsvMat, gocv.ColorBGRToHSV)
// 取ROI中心的HSV值
hsvCenter := hsvMat.GetVecb(hsvMat.Rows()/2, hsvMat.Cols()/2)
fmt.Printf("拾取颜色HSV(整数): %d, %d, %d\n", hsvCenter[0], hsvCenter[1], hsvCenter[2])

关键说明:

  • OpenCV图像默认是BGR通道顺序,转换颜色空间时需注意对应关系;
  • GetVecb参数为(y, x),图像行对应y轴、列对应x轴,不要搞反。

3. 如何分离相似颜色/亮白/黑色棋子与背景?

针对不同颜色类型,采用针对性策略:

亮白棋子

  • 利用HSV的V(亮度)通道:亮白棋子V值通常远高于背景,直接对V通道做阈值分割生成掩码;
  • 轮廓过滤:若背景也偏亮,用Canny边缘检测提取轮廓,再通过轮廓的圆形度、面积筛选棋子(双陆棋棋子为圆形)。

黑色棋子

  • 基于V通道反向阈值分割:黑色棋子V值远低于背景,直接分割;
  • 灰度图自适应阈值:用adaptiveThreshold处理灰度图,自动适配局部亮度差异,过滤背景噪声。

相似颜色棋子与背景

  • 颜色空间转换:将图像转到Lab或YCrCb空间,这类空间能更好分离色彩与亮度,比如YCrCb的Cr/Cb通道可忽略亮度影响,仅区分色彩;
  • 直方图均衡化:对灰度图或V通道做equalizeHist,增强局部对比度,放大棋子与背景的差异;
  • 校准区间匹配:用校准阶段获取的棋子颜色区间做inRange,保留匹配像素后结合形态学操作优化掩码。

内容的提问来源于stack exchange,提问作者amlwwalker

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.19 05:35:28