我使用 python opencv 加载一个形状为 (30, 100, 3) 的图像,现在想按颜色计算所有颜色的频率,我指的不是单个 channel ,而是 channel 组合。含义 3 channel 列表,例如[255, 0, 0] 代表红色,[255, 255, 0] 代表黄色,[100, 100, 100] 代表另一种颜色。所以我希望将最后一个轴( channel )视为一个整体并计算其频率。
opencv 或 numpy 中是否有任何内置函数可以轻松地将 3 channel 列表视为一个元素并计算其频率?
最佳答案
你可以使用 np.unique
具有进行分组的新 axis
参数功能 -
np.c_[np.unique(im.reshape(-1,3), axis=0, return_counts=1)]
sample 运行-
In [56]: im
Out[56]:
array([[[255, 255, 255],
[255, 0, 0]],
[[255, 0, 255],
[255, 255, 255]]])
In [57]: np.c_[np.unique(im.reshape(-1,3), axis=0, return_counts=1)]
Out[57]:
array([[255, 0, 0, 1],
[255, 0, 255, 1],
[255, 255, 255, 2]])
关于numpy - 如何计算图像中的 RGB 或 HSV channel 组合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49320245/