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