如何使用Python OpenCV统计指定色值范围内的像素数量
实现方法
推荐使用HSV色彩空间阈值筛选的方案,相比直接在RGB空间判断,HSV的色调维度可以直接区分颜色类别,不受亮度、饱和度变化干扰,更匹配人眼对「相近颜色」的判定逻辑,而且OpenCV自带的原生函数效率极高,不需要手动遍历像素。
具体步骤
- 步骤1:将OpenCV默认读取的BGR格式图像转换为HSV色彩空间
- 步骤2:设定目标颜色对应的HSV上下阈值,阈值范围越大,匹配的相近色越多
- 步骤3:调用
cv2.inRange()生成符合颜色范围的二值掩码 - 步骤4:调用
cv2.countNonZero()统计掩码中白色像素的总数,就是符合要求的像素数量
完整代码示例
import cv2 import numpy as np # 读取本地图像 img = cv2.imread("test.jpg") # 转换为HSV色彩空间 hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV) # 浅青绿色的HSV阈值,可根据实际需求调整范围 # H取值范围0-180,S、V取值范围0-255 lower_bound = np.array([80, 40, 40]) upper_bound = np.array([100, 255, 255]) # 生成掩码:符合范围的像素为255,不符合为0 mask = cv2.inRange(hsv, lower_bound, upper_bound) # 统计符合要求的像素总数 total = cv2.countNonZero(mask) print(f"匹配的像素总数:{total}")
补充说明
- 如果你不确定阈值怎么设置,可以做一个带滑动条的调试小工具,实时调整阈值看掩码匹配效果,找到最合适的范围。
- 如果你坚持要在RGB空间做匹配,也可以直接把
lower_bound和upper_bound换成RGB的阈值范围,把inRange的输入换成原图即可,只是RGB空间的匹配容易受光照明暗影响,误差会更大。 - 该方案所有运算都是OpenCV底层优化实现,哪怕是4K分辨率的大图也能毫秒级出结果,远快于Python层面的像素遍历。
内容的提问来源于stack exchange,提问作者Matthias
相关产品推荐
相关产品推荐

