1

问题使用的颜色数量:编程获得的图像

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

约束:

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

回答

5

为什么写自己的程序?

如果你有一个shell脚本执行此操作,您可以使用netpbm公用事业:

count = `pngtoppm png_file | ppmhist -noheader | wc -l` 
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

+0

以秒为单位击败我。 – user5722 2009-10-25 07:41:15

+0

他特别想要使用**实际**数量的颜色,所以基于颜色深度或调色板的上限不够好 – Alnitak 2009-10-25 07:44:26

+0

嘿,很好。我回答正确,然后在我的答案上扩大一点,以提供一个潜在的有用信息,并为此给予评价。提醒我永远不要为我的陈述添加颜色或上下文..我应该在分号后停止。 – Maas 2009-10-25 07:48:48

1

参宿的解决方案是不错的:)我真的应该了解的NetPBM和ImageMagick的更好等一段时间。

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

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

+0

“通过图像中的每个像素循环[...]”不仅仅是这个问题的更详细的重新陈述吗? – knorv 2009-10-25 19:53:52

+0

可以说,任何程序都是一个更详细的问题重申:)问​​题是提问者是否知道这一点,以及是否有助于告诉他。我根据问题的写法做出了一个电话,并决定他可能不知道这个问题。 – 2009-10-27 21:55:37