首页 > 解决方案 > 查找numpy数组中等于给定颜色的像素数

问题描述

我一直在四处搜寻,似乎无法找到这个问题的答案。假设我有一个给定的 RGB 值,即 (255,0,25) 或类似的值。

我有一个名为'img'的ndarray(高度,宽度,3)。现在,我想找到这个数组中与我的颜色相等的像素数。我以为做

(img==(255,0,25)).sum()会起作用,但即使我的图像仅由颜色 (255,0,25) 组成,我也会多算,而且当 r=255、0 或 25 以及 g=255 时,这似乎是总和, 0 或 25,当 b=255,0 或 25 时。

我一直在搜索 numpy 文档,但我找不到一种方法来比较像素,而不是元素。有任何想法吗?

标签: pythonnumpy

解决方案


它分别比较每个值,RGB因此每个像素都给出元组(True, True, True),您必须转换(True, True, True)True使用.all(axis=...)

对于 3D 阵列(y,x,RGB),您必须使用.all(axis=2)或更通用.all(axis=-1)的,如评论中所注意到的 @QuangHoang。

print( (img == (255,0,25)).all(axis=-1).sum() )

import numpy as np

img = np.array([[(255,0,25) for x in range(3)] for x in range(3)])
#print(img)

print( (img == (255,0,25)).all(axis=-1).sum() )  # 9

img[1][1] = (0,0,0)
img[1][2] = (0,0,0)
#print(img)

print( (img == (255,0,25)).all(axis=-1).sum() )  # 7

推荐阅读