我有一些像这样的图像
# **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]
],
])我需要在我的图像中找到每种颜色的计数,即以下三个元组的计数: 0,0,255,255,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 2 1 5)时,我得到了类似的结果。
我还尝试给出一个元组作为轴输入,axis=(0, 1),它返回错误TypeError: an integer is required (got type tuple)。
你知道我做错了什么吗?
发布于 2019-10-08 13:12:05
首先使用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)发布于 2019-10-08 13:04:51
你可以这样做:
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]https://stackoverflow.com/questions/58286837
复制相似问题