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

Language agnostic 以编程方式获取图像中使用的颜色数,language-agnostic,image,image-processing,image-manipulation,colors,Language Agnostic,Image,Image Processing,Image Manipulation,Colors,问题: 给定PNG格式的图像,以编程方式获取图像中使用的颜色数的最简单方法是什么 限制条件: 该解决方案将集成到Linux下运行的shell脚本中,因此任何适合这种环境的解决方案都可以 请注意,“图像文件的颜色容量”不一定与“使用的颜色”对应。示例:在理论颜色容量为256色的图像文件中,实际使用的颜色可能只有7种。我想获得实际使用的颜色数量 有趣。似乎没有任何保证做到这一点的方法;在最坏的情况下,你需要扫描图像,并解释每个像素,在最好的情况下,PNG将使用调色板,你可以检查那里 即使在调色

问题:

  • 给定PNG格式的图像,以编程方式获取图像中使用的颜色数的最简单方法是什么
限制条件:

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

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

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

      。。以及此处的区块信息:


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

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

      。。以及此处的区块信息:


      Python映像库中的方法似乎正是您想要的。

      Python映像库中的方法似乎正是您想要的。

      为什么要编写自己的程序

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

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

      为什么要编写自己的程序

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

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

      Alnitak的解决方案很好:)我真的应该了解netpbm和imagemagick等。最好有时间

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


      如果要计算发生次数,请使用hashmap/字典,而不是简单的列表,如果在字典中已经找到,则增加键的值(计数器)。如果找不到,请将其添加为起始计数器值1。

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

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


      如果要计算发生次数,请使用hashmap/字典,而不是简单的列表,如果在字典中已经找到,则增加键的值(计数器)。如果找不到,则将其添加为起始计数器值1。

      他特别想要使用的颜色的实际数量,因此基于颜色深度或调色板的上限不太好。我回答正确,然后在我的答案上展开一点,给出一个潜在的有用的信封背面加法,你们会给我评分吗?提醒我不要在我的陈述中添加色彩或上下文。。我应该在分号之后停止。实际上,你应该在“解释每个像素”之后停止。他特别想要使用的颜色的实际数量,所以基于颜色深度或调色板的上限不好哦,好的。我回答正确,然后在我的答案上展开一点,给出一个潜在的有用的信封背面加法,你们会给我评分吗?提醒我不要在我的陈述中添加色彩或上下文。。我应该在分号之后停止。实际上,你应该在“解释每个像素”“循环图像中的每个像素[…]”之后停止。这不只是对问题的更详细的重新陈述吗?可以说,任何程序都是对问题的更详细的重申:)问题是询问者是否知道,告诉他是否有帮助。我根据问题的编写方式打了一个电话,认为他可能不知道。“遍历图像中的每个像素[…]”这不是对问题的更详细的重新陈述吗?可以说,任何程序都是对问题的更详细的重述:)问题是询问者是否知道,告诉他是否有帮助。我根据问题的写法打了个电话,认为他可能不知道。