以编程方式获取图像中使用的颜色数

时间:2009-10-25 07:33:55

标签: language-agnostic image image-processing image-manipulation colors

问题:

  • 鉴于PNG格式的图像,以编程方式获取图像中使用的颜色数的最简单方法是什么?

约束:

  • 该解决方案将集成到在Linux下运行的shell脚本中,因此任何适合此类环境的解决方案都可以。
  • 请注意,“图像文件的颜色容量”不一定与“使用的颜色”相对应。示例:在理论颜色容量为256色的图像文件中,只有7种颜色可能在实际使用中。我想获得实际使用的颜色数

4 个答案:

答案 0 :(得分:5)

为什么要编写自己的程序?

如果您使用shell脚本执行此操作,则可以使用netpbm实用程序:

count = `pngtoppm png_file | ppmhist -noheader | wc -l`

答案 1 :(得分:4)

Python Imaging Library中的Image.getcolors方法似乎完全符合您的要求。

答案 2 :(得分:2)

趣。似乎没有任何保证的方法可以做到这一点;在最坏的情况下,你需要扫描图像并解释每个像素,在最好的情况下,PNG将使用调色板,你可以在那里检查。

即使在调色板的情况下,也不能保证每个条目都被使用 - 所以你(最好)得到一个上限。

http://www.libpng.org/pub/png/spec/1.1/PNG-Contents.html

..和块信息在这里:

http://www.libpng.org/pub/png/spec/1.1/PNG-Chunks.html

答案 3 :(得分:1)

Alnitak的解决方案很好:)我真的应该更好地了解netpbm和imagemagick等。

仅供参考,作为一种简单且非常通用的解决方案:循环遍历图像中的每个像素,将r,g,b颜色值作为单个整数。在列表中查找该整数。如果它不存在,请添加它。完成所有像素后,打印列表中的颜色数。

如果要计算出现次数,请使用散列映射/字典而不是简单列表,如果已在字典中找到,则递增键的值(计数器)。如果未找到,请使用起始计数器值1添加它。