手元にインデックスカラー画像2007_000032.pngがあります。インデックスカラー画像については、ここやここで勉強しました。このインデックスカラー画像2007_000032.pngはVOC PASCALデータセット2011に含まれているものです。インデックスカラー画像2007_000032.pngはここのinput画像と同じです。
インデックスカラー画像は、パレットとインデックスから構成され、パレットでは各整数のRGB値を指定し、インデックスでは各ピクセルに整数を割り当てると認識しています。
ところが、pythonでインデックスカラー画像2007_000032.pngを読み込んで、その配列を次のように表示させると、各ピクセルのインデックス番号ではなく、RGB値が表示されます。
python
1>>import numpy as np 2>>import cv2 3>>np.set_printoptions(threshold=np.inf) 4>>img = cv2.imread("2007_000032.png") 5>>img[100]
・
・
・
[192, 224, 224],
[192, 224, 224],
[192, 224, 224],
[192, 224, 224],
[ 0, 0, 128],
[ 0, 0, 128],
[ 0, 0, 128],
[ 0, 0, 128],
[ 0, 0, 128],
[ 0, 0, 128],
[ 0, 0, 128],
[ 0, 0, 128],
[ 0, 0, 128],
[ 0, 0, 128],
[192, 224, 224],
・
・
・
(出力は一部のみを抜粋)
各ピクセルごとのRGB値ではなく、インデックス番号を表示させるにはどうしたらよいでしょうか。また、パレットの情報を確認するにはどうしたらよいでしょうか。
環境はUbuntu16.04LTSを利用しています。
追記
python
1>>import numpy as np 2>>from PIL import Image 3 4>>np.set_printoptions(threshold=np.inf) 5>>image = Image.open("2007_000032.png") 6>>image2 = np.asarray(image) 7>>image2 8
とすれば、インデックスカラーは確認できるみたいですね。でもなんだか、一度画像をPILオブジェクトとして読み込んで、numpyオブジェクトに変換して・・・ってまどろっこしいですね。もっとスマートな方法はないものでしょうか。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/13 06:21