質問

質問:

  • PNG形式の画像の場合、画像で使用する色の数をプログラムで取得する最も簡単な方法は何ですか?

制約:

  • ソリューションはLinuxで実行されるシェルスクリプトに統合されるため、このような環境に適合するソリューションであればすべて実行できます。
  • 「画像ファイルのカラー容量」は、 「使用する色」に必ずしも対応していません。例:256色の理論上の色容量を持つ画像ファイルでは、実際に使用されているのは7色だけであると言えます。実際に使用する色の数を取得したい。
役に立ちましたか?

解決

独自のプログラムを作成する理由

シェルスクリプトを使用してこれを行う場合、 netpbm ユーティリティを使用できます。

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

他のヒント

Pythonの Image.getcolors メソッドイメージングライブラリは、まさにあなたが望むことをするようです。

楽しい。これを行う方法は保証されていません。最悪の場合、画像をスキャンしてすべてのピクセルを解釈する必要があります。可能な限り、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

Alnitakのソリューションは素晴らしいです:) netpbmやimagemagickなどについては、いつかもっとよく知る必要があります。

単純で非常に一般的な解決策として、画像の各ピクセルをループし、r、g、bの色の値を単一の整数として取得します。リストでその整数を探します。存在しない場合は追加します。すべてのピクセルを使い終わったら、リスト内の色数を印刷します。

発生をカウントする場合は、単純なリストの代わりにハッシュマップ/ディクショナリを使用します。ディクショナリですでに見つかっている場合は、キーの値(カウンタ)を増やします。見つからない場合は、開始カウンター値1で追加します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top