在 Numpy Ndarray 中查找唯一三元组的计数



我有一些像这样的ndarray形式的图像:

# **INPUT**
img = np.array(
[
[
[0, 0, 255],
[0, 0, 255],
[0, 0, 255],
[0, 0, 255],
[0, 0, 255],
[0, 0, 255],
[0, 0, 255],
[0, 0, 255]
],
[
[255, 0, 0],
[255, 0, 0],
[255, 0, 0],
[0, 255, 0],
[0, 255, 0],
[255, 0, 0],
[255, 0, 0],
[255, 0, 0]
],
[
[255, 0, 0],
[0, 255, 0],
[255, 0, 0],
[255, 0, 0],
[255, 0, 0],
[255, 0, 0],
[255, 0, 0],
[255, 0, 0]
],
[
[255, 0, 0],
[255, 0, 0],
[255, 0, 0],
[255, 0, 0],
[255, 0, 0],
[255, 0, 0],
[255, 0, 0],
[255, 0, 0]
],
])

我需要在我的图像中找到每种颜色的计数,即以下元组的计数为 3:[0, 0, 255],[255, 0, 0],[0, 255, 0]。在这种情况下:

# **Desired OUTPUT**
unique  [[  0   0 255]
[255   0   0]
[  0 255   0]]
counts  [8 21 3]

这是我所做的:

print('AXIS 0 -----------------------------------')
unique0, counts0 = np.unique(img, axis=0, return_counts=True)
print('unique0 ', unique0)
print('counts0 ', counts0)

这是输出:

AXIS 0 -----------------------------------
unique0  [[[  0   0 255]
[  0   0 255]
[  0   0 255]
[  0   0 255]
[  0   0 255]
[  0   0 255]
[  0   0 255]
[  0   0 255]]
[[255   0   0]
[  0 255   0]
[255   0   0]
[255   0   0]
[255   0   0]
[255   0   0]
[255   0   0]
[255   0   0]]
[[255   0   0]
[255   0   0]
[255   0   0]
[  0 255   0]
[  0 255   0]
[255   0   0]
[255   0   0]
[255   0   0]]
[[255   0   0]
[255   0   0]
[255   0   0]
[255   0   0]
[255   0   0]
[255   0   0]
[255   0   0]
[255   0   0]]]
counts0  [1 1 1 1]

尝试使用axis=1时,我得到类似的结果(计数1 [2 1 5](。

我还尝试将元组作为轴输入,axis=(0, 1),返回错误TypeError: an integer is required (got type tuple)

知道我做错了什么吗?

首先使用np.concatenate沿第一个轴连接 ndarray,然后像你一样使用np.unique,设置return_counts=True,这将返回扁平化2D数组的计数:

unique, counts = np.unique(np.concatenate(mg), axis=0, return_counts=True)

print(unique)
[[  0   0 255]
[  0 255   0]
[255   0   0]]
print(counts)
# array([ 8,  3, 21], dtype=int64)

你可以做:

elements, counts = np.unique(img.reshape((-1, 3)), axis=0, return_counts=True)
print(elements, counts)

输出

[[  0   0 255]
[  0 255   0]
[255   0   0]] [ 8  3 21]

最新更新