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

如何使用Python统计二进制数组中的相邻像素数量

方案实现

你可以通过Pillow读取图像,配合numpy做矩阵运算实现需求,以下分两种常见场景给出代码:

场景1:统计原图所有黑色像素总量

如果你的需求是统计整张图里全部黑色像素的数量,直接二值化后计数即可:

from PIL import Image
import numpy as np

# 读取图像并转为灰度模式
img = Image.open("你的图像文件路径").convert("L")
# 二值化处理:像素值小于127判定为黑色,否则为白色
binary_arr = (np.array(img) < 127).astype(np.uint8)
# 统计黑色像素(值为0)的数量
black_count = np.sum(binary_arr == 0)
print(f"黑色像素总数量:{black_count}")

场景2:统计黑色区域的边缘像素(对应示意图绿色标注位置)

如果你的需求是统计黑色区域和白色区域的交界像素(也就是你用numpy.diff()尝试计算的目标),可以用邻域判断法避免重复计数:

from PIL import Image
import numpy as np

# 读取图像并二值化,0代表黑色,1代表白色
img = Image.open("你的图像文件路径").convert("L")
binary_arr = (np.array(img) < 127).astype(np.uint8)

# 生成四个方向的偏移矩阵,边缘补1(白色)
pad_right = np.pad(binary_arr[:, 1:], ((0, 0), (0, 1)), constant_values=1)
pad_left = np.pad(binary_arr[:, :-1], ((0, 0), (1, 0)), constant_values=1)
pad_down = np.pad(binary_arr[1:, :], ((0, 1), (0, 0)), constant_values=1)
pad_up = np.pad(binary_arr[:-1, :], ((1, 0), (0, 0)), constant_values=1)

# 筛选满足条件的像素:本身是黑色,且上下左右至少有一个方向是白色
edge_pixels = (binary_arr == 0) & ((pad_right == 1) | (pad_left == 1) | (pad_down == 1) | (pad_up == 1))
edge_count = np.sum(edge_pixels)
print(f"边缘黑色像素数量:{edge_count}")

该方案逐像素判断是否符合要求,每个符合条件的像素仅计数一次,完全避免了numpy.diff()带来的重复计数问题。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 01:15:02