将十六进制颜色空间划分为多个区域

时间:2017-10-13 09:53:44

标签: c++ opencv

要将灰度色彩空间划分为多个区域,我只需将255除以nbins。为了确定灰度色块,我只需检查颜色所在的色域范围。因此,将灰度色空间划分为容器,我得到并且是微不足道的。我知道,例如,0到25之间的颜色有一些相似之处 - 它们非常黑/黑。

但是如何将十六进制颜色空间划分为二进制文件呢?我只是做同样的事情;将16(billon?)除以nbins?那些箱子是否有某种相似性 - 比如灰度等级0到25在阴影中是如何相似的,在阴影中是否与0x000到0x100相似?

我的用例是对图像进行颜色缩小然后计算像素颜色(十六进制),但我会将这些颜色排序为二进制数,而不是计算单个颜色。

OpenCV是否有一些功能可以分割十六进制颜色空间?我会更好地避免使用十六进制并仅移动到Hue通道吗?我是否能有效地使用十六进制相同的东西,除非没有十六进制的巨大范围?

1 个答案:

答案 0 :(得分:0)

他们(如评论所述)并非“十六进制”颜色,而是“RGB”颜色。

现在,您可以做的是将每个的R,G和B 划分为nbins,但总共会nbins*nbins*nbins。相反,您可能需要考虑将它们分别分为std::cbrtn(bins)(立方根)。你可能会有一些舍入效应。

您还可以细分HSV表示。这是相同的色彩空间,但表达方式不同。在这种情况下,你如何划分HSV空间并不是那么明显。对于白色(V~1)和非常暗/黑色(V~0),色调不明确。您当然可以使用上面给出的方法,只需使用每个组件的简单分区。但这不会给你同样好的结果。您使用了太多的{​​{1}}来区分白色和黑色附近的色调。

真实的色彩还原方法是Floyd-Steinberg dithering。可能有点矫枉过正。