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

使用Numpy结合OpenCV统计图像黑白像素数量结果与实际不符如何解决

问题原因

cv2.imread默认以BGR三通道格式读取图像,哪怕输入图像本身是单通道灰度图,读入后也会被转换为3通道格式,每个像素对应B、G、R三个数值。你当前代码直接对整个三通道数组做相等判断并统计,会把单个像素的三个通道值分别计数:

  • 1个纯白色像素三通道值均为255,会被统计为3次符合img==255的结果,3个白色像素刚好对应你输出的9次统计值
  • 1个纯黑色像素三通道值均为0,会被统计为3次符合img==0的结果,和你输出的36次黑色统计值匹配
解决方法

方案1:读取时直接加载为灰度图

修改imread的读取参数,指定单通道灰度读取,修改对应代码行:

# 第二个参数指定灰度模式读取,读入后数组为二维单通道
img = cv2.imread(path, cv2.IMREAD_GRAYSCALE)

读取后不需要再处理通道维度,后续统计逻辑可以直接复用,统计结果就是实际像素数量。

方案2:三通道图像判断时按像素维度聚合

如果必须保留三通道读取的逻辑,统计时增加维度判断,要求单像素的三个通道全部满足条件才计数:

# axis=-1 指最后一个维度(通道维度)全部满足条件才计数
number_of_white_pix = np.sum((img == 255).all(axis=-1))
number_of_black_pix = np.sum((img == 0).all(axis=-1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:45:02