如何计算图像中的 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图像滤波

如何合并 HSV 频道

计算机视觉—— 图像预处理

由RGB到HSV颜色空间的理解

OpenCV RGB直方图计算与绘制----calcHist()函数normalize()函数

RGB和HSV有何不同