我使用python opencv加载一个有形状(30,100,3)的图像,现在想要计算所有颜色的频率,按颜色,我不是指个别频道,我的意思是频道组合。含义3频道列表,例如红色为[255,0,0],黄色为[255,255,0],另一种颜色为[100,100,100]。所以我希望将最后一个轴(通道)作为一个整体来对待并计算其频率。
opencv或numpy中是否有任何内置函数可以轻松将3通道列表视为一个元素并计算其频率?
答案 0 :(得分:4)
您可以使用np.unique
及其新的axis
参数功能进行分组 -
np.c_[np.unique(im.reshape(-1,3), axis=0, return_counts=1)]
示例运行 -
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]])