求Numpy-Ndarray中唯一三元组的计数

2024-10-03 13:22:23 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些像这样的图像:

# **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(counts1[2115])时得到了类似的结果。你知道吗

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

你知道我做错了什么吗?你知道吗


Tags: 图像imginput颜色nparray计数元组
2条回答

你可以做:

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]

首先使用^{}沿第一个轴连接ndarray,然后使用^{},设置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)

相关问题 更多 >