2017-10-13 62 views
0

要将灰度色彩空间分成两个分区,我只需将nbins除255即可。要确定一个灰度色块,我只需检查色彩所在的色块范围。因此,将灰度色彩空间划分为我可以获得的小块色彩空间并不重要。我知道,例如,从0到25的颜色有一些相似之处 - 它们非常黑/黑。将十六进制颜色空间分为两个分区

但是将十六进制色彩空间分成多个分区呢?我只是做同样的事情吗?将16(billon?)分成nbins?这些垃圾箱有一些相似之处 - 比如灰度0到25如何在阴影中相似,是0x000到0x100相似的阴影?

我的用例是颜色减少图像,然后计算像素颜色(十六进制),但我会将它们分类到箱,而不是计算单个颜色。

OpenCV有一些功能已经划分了十六进制色彩空间吗?我会更好地避免十六进制,只能移动到Hue频道吗?除了不具有十六进制的大范围外,我是否可以有效地使用与十六进制相同的内容?

+0

do kmeans cluster on the color – Silencer

+1

没有十六进制颜色空间。十六进制和十进制数字是具有相同规则的完全相同的数字,只是写法不同而已。 – nwp

回答

0

它们(作为注释状态)并不像“RGB”颜色那么多的“十六进制”颜色。

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

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

真实世界的减色方法是Floyd-Steinberg dithering。可能对你有点过度。