计算图像中独特颜色的数量

saz*_*azr 4 opencv numpy

我正在尝试计算图像中独特颜色的数量。我有一些代码,我认为应该可以工作,但是当我在图像上运行它时,它说我有 252 种不同的颜色,可能是 16,777,216\xe2\x80\xac。考虑到图像是 BGR,这似乎是错误的,所以它们不应该有更多不同的颜色(数千而不是数百?)?

\n\n
def count_colours(src):\n    unique, counts = np.unique(src, return_counts=True)\n    print(counts.size)\n    return counts.size\n\nsrc = cv2.imread(\'../../images/di8.jpg\')\nsrc = imutils.resize(src, height=300)\ncount_colours(src) # outputs 252 different colours!? only?\n
Run Code Online (Sandbox Code Playgroud)\n\n

这个值正确吗?如果不是,我该如何修复我的功能count_colours()

\n\n

源图像:\n在此输入图像描述

\n\n

编辑:这是正确的吗?

\n\n
def count_colours(src):\n    unique, counts = np.unique(src.reshape(-1, src.shape[-1]), axis=0, return_counts=True)\n    return counts.size\n
Run Code Online (Sandbox Code Playgroud)\n

Pau*_*zer 7

如果您查看unique返回的 s,我很确定您会发现它们是标量。您需要使用axis关键字:

>>> import numpy as np
>>> from scipy.misc import face
>>> 
>>> img = face()
>>> np.unique(img.reshape(-1, img.shape[-1]), axis=0, return_counts=True)
(array([[  0,   0,   5],
       [  0,   0,   7],
       [  0,   0,   9],
       ...,
       [255, 248, 255],
       [255, 249, 255],
       [255, 252, 255]], dtype=uint8), array([1, 2, 2, ..., 1, 1, 1]))
Run Code Online (Sandbox Code Playgroud)

  • @sazr 看不出有什么问题。顺便提一句。如果您想要的只是不同颜色的数量,那么您不需要“return_counts”。只需使用“uniques = np.unique(src.reshape(-1, src.shape[-1]), axis=0)”,然后使用“len(uniques)”或“uniques.shape[0]” (3认同)