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

OpenCV颜色范围过滤提取围棋棋盘失败,求正确颜色范围设置

问题描述

我正在测试多种从图像中提取围棋棋盘的方法(示例图如下):
围棋棋盘示例图

我有几个思路,其中之一是让用户选择棋盘颜色后进行一定范围的颜色过滤。我尝试用OpenCV实现该思路,但可能对颜色空间理解有误,导致输出图像全黑。以下是我使用的代码:

import cv2
import numpy as np
  
img = cv2.imread(cv2.samples.findFile('data/go_board2.jpeg'))

# 将图像从BGR颜色空间转换为HSV颜色空间
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lower_brown = np.array([34, 10, 95])
upper_brown = np.array([25, 49, 49])

# 生成颜色掩码
mask = cv2.inRange(hsv, lower_brown, upper_brown)

# 保留掩码内的图像区域
result = cv2.bitwise_and(img, img, mask = mask)

cv2.imwrite("res/color/img.jpg", img)
cv2.imwrite("res/color/mask.jpg", mask)
cv2.imwrite("res/color/result.jpg", result)

我设定[34, 10, 95]为浅棕色,[25, 49, 49]为深棕色,格式是[色调(Hue), 饱和度(Saturation), 明度(Value)],但显然该颜色范围为空。请问如何正确设置我需要的范围(棋盘深浅棕色之间的颜色)?

解决方案

核心问题是HSV范围的上下限逻辑错误,同时对棕色的HSV取值区间理解有误,修正方法如下:

  1. 修正上下限顺序
    OpenCV的cv2.inRange()要求lower数组的每个分量必须小于等于upper数组的对应分量。你当前的Hue分量下限34大于上限25,直接导致颜色范围为空,所以掩码全黑,最终输出也全黑。

  2. 设置正确的棕色HSV范围
    棕色在HSV空间的典型取值区间为:

  • 色调(Hue):10~30(属于红黄色系偏向棕色的区间)
  • 饱和度(Saturation):40~100(保证棕色的色彩浓度,避免和灰色混淆)
  • 明度(Value):60~180(覆盖深浅棕色的明度范围)

调整后的代码:

import cv2
import numpy as np
  
img = cv2.imread(cv2.samples.findFile('data/go_board2.jpeg'))

hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
# 深棕色为下限,浅棕色为上限
lower_brown = np.array([10, 40, 60])
upper_brown = np.array([30, 100, 180])

mask = cv2.inRange(hsv, lower_brown, upper_brown)
result = cv2.bitwise_and(img, img, mask = mask)

cv2.imwrite("res/color/img.jpg", img)
cv2.imwrite("res/color/mask.jpg", mask)
cv2.imwrite("res/color/result.jpg", result)
  1. 精准获取颜色范围的技巧
    如果需要针对特定棋盘的棕色做更精准过滤,可以:
  • 提取棋盘上的棕色像素点,转换为HSV值
  • 围绕该值设置±10左右的Hue范围,±20左右的饱和度和明度范围
  • 用OpenCV滑动条工具实时调整HSV上下限,找到最匹配的区间

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 20:53:31