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

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

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

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

【问题讨论】:

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

标签: opencv colors quantization


【解决方案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 的结果来做您想做的事情。

【讨论】:

    猜你喜欢
    • 2015-11-25
    • 1970-01-01
    • 1970-01-01
    • 2021-11-11
    • 2016-06-17
    • 2019-04-11
    • 1970-01-01
    • 2014-09-01
    • 2021-02-10
    相关资源
    最近更新 更多