“颜色量化”是 OpenCV 中颜色量化的正确名称吗?

Posted

技术标签:

【中文标题】“颜色量化”是 OpenCV 中颜色量化的正确名称吗?【英文标题】:Is "color quantization" the right name for color quantization in OpenCV? 【发布时间】:2013-03-06 10:28:57 【问题描述】:

我正在寻找一种方法来使用 OpenCV 获取给定图像中每个像素的所有 RGB 值的完整列表,现在我称之为“颜色量化”。

问题是,根据我在网上查到的,至少在这一点上,这个“颜色量化”的东西是关于直方​​图或“颜色减少”或类似的离散计算解决方案。 p>

既然我知道我想要什么,而且“互联网”似乎对这个词的含义有不同的看法,我想知道:也许没有真正的解决方案? OpenCV 库中可行的方法或工作算法。

【问题讨论】:

不是每个像素只有一个R、G、B值关联吗? @perfanoff 请记住,我想要一个 RGB 值及其相关百分比的列表,而不仅仅是 1 个像素值。 可能重复:Accessing certain pixel RGB value in openCV @volting 逐个像素访问,这与我想象的不完全一样,基本上也需要我身边的适当数据结构,我没有使用任何特定的 OpenCV 方法种方法。我希望在 OpenCV 方面有一个非常有效的算法。 所以你只想要一个正确百分比的所有 RGB 值列表? 【参考方案1】:

色彩量化是在有限的数字色彩空间中转换无限的自然色彩。无论如何,要创建全彩色“直方图”,您可以使用 opencv 的稀疏矩阵实现并编写自己的函数来计算它。当然,如果您没有关于图像的其他结构或连续性信息,您必须逐个访问像素。

【讨论】:

OpenCV 是否能够根据给定图像采用的颜色模型来管理和触发不同的动作?例如检测图像是使用 sRGB 还是 Adob​​e RGB 还是 CMYK ? 默认情况下没有。但是您应该能够从文件的 EXIF 中读取它并采取相应的行动。顺便说一句,opencv 使用 BGR 格式。见here 好的,谢谢,最后一件事,直方图只是图形,或者我也可以获得像 std::vector 或 std::map 这样的数字输出? 要绘制直方图,您需要事先以数字形式提供数据。如果映射已知,它可以像数组一样简单,例如 0-255 灰度值 -> 256x1 数组 是的,但我想知道如何以及是否可以获得与标准兼容的数字表示,换句话说,是否有 OpenCV 方法可以做到这一点,或者 OpenCV 数据结构是否被授予与标准兼容。【参考方案2】:

一般来说,量化是一种将具有实数(数学)值的输入信号转换为一组离散值的操作。实现此过程的一种可能算法是计算数据的直方图,然后保留与人口较多的直方图的 n 个 bin 对应的 n 个值。

您尝试做的可能会被称为颜色列表。 如果您正在使用 8 位量化图像(类型 CV_8UC3),我的猜测是您可以通过获取输入图像的直方图(bin 宽度等于 1)然后搜索非空 bin 的结果来做您想做的事情。

【讨论】:

以上是关于“颜色量化”是 OpenCV 中颜色量化的正确名称吗?的主要内容,如果未能解决你的问题,请参考以下文章

适用于 Android 的最快可用颜色量化算法是啥?

有效的 gif/图像颜色量化?

如何使用 OpenCV 减少图像中的颜色数量?

Matlab 颜色量化

需要对用于迭代颜色量化的调色板数据结构的建议;特别是KD堆的任何经验?

如何使用颜色量化器描述符?