PNGファイルから特定の色を探すことをやっていて、PNGファイルの取扱に手間取ったので、その備忘録です。
画像のデータ構造
普通の画像データ
基本的な画像のデータ構造では、画像中の各画像について光の三原色であるRGBを0 ~ 255の間の数で表現することで画像を表現します。 RGBに加えて透過率を加えた4次元のベクトルによって各画素が表現されることになります。 イメージはこんな感じです。
実際のデータを見てみると見るとこんな感じです。
PNG(.png)
今回対象になっているPNGファイルでは、ビットマップの形式からデータ量を圧縮されています。 圧縮の中身ですが、PNGでは"カラーパレット"と呼ばれる、画像に使用できる色のリストを保持しています。 そしてカラーパレットの通し番号を使用することで、各画素の色を表現しています。
イメージとしてはこんな感じです。
こちらも実際に眺めて見るとこんな感じです。
Pillow
今回はカラーパレットの中身を見たり操作したりするために、Pillow (PIL)を使用します。
https://pillow.readthedocs.io/en/4.1.x/index.html
実際にやってみる
実際にやってみたいと思います。 こちらの画像で試しにやってみたいと思います。
試しにいくつかの色を抽出してみます。
こんな感じにPNGファイルの特定の色を抽出できました。
感想
画像もちゃんと勉強してみると奥が深いですね。 他にも画像の圧縮形式はありますので、機会があったらそのうち勉強したいと思います。