如何计算图像中的 RGB 或 HSV 通道组合?
Posted
技术标签:
【中文标题】如何计算图像中的 RGB 或 HSV 通道组合?【英文标题】:How to count RGB or HSV channel combination in an image? 【发布时间】:2018-08-25 11:47:37 【问题描述】:我使用 python opencv 加载具有形状 (30, 100, 3) 的图像,现在想计算所有颜色的频率,按颜色,我不是指单个通道,我是指通道组合。含义 3 频道列表,例如[255, 0, 0] 表示红色, [255, 255, 0] 表示黄色, [100, 100, 100] 表示另一种颜色。所以我希望最后一个轴(通道)被视为一个整体并计算它的频率。
opencv 或 numpy 中是否有任何内置函数可以轻松地将 3 通道列表视为一个元素并计算其频率?
【问题讨论】:
所以,输出将是一个数组,对吧?它的形状应该是什么?它最多有 256**3 个元素。 输出可以是[[R,G ,B, frequency ], [R,G ,B, frequency ], ....] 【参考方案1】:您可以将 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]])
【讨论】:
谢谢!完美的解决方案!以上是关于如何计算图像中的 RGB 或 HSV 通道组合?的主要内容,如果未能解决你的问题,请参考以下文章
python库skimage 将针对灰度图像的滤波器用于RGB图像 逐通道滤波;转换为HSV图像滤波