.png
の画像をマスクとして使用しています。これらのマスクの問題は、それらがほんのわずかの値を含むことである。 12の値のみが0〜11です。私は有用な(私にとっては)方法でそれらを表示することができれば、異なる値を光学的に区別できることを意味します。私はこのアプローチを試してみました特定の色の範囲で画像を正しく表示するには
:ちょうど[0255)の値に[0,11]の値を投影し
from PIL import Image
import numpy as np
im = Image.open('mask.png')
im.show() # it all black but different values exist
len(set(list(im.getdata())))
a = 255/np.amax(np.array(im))
im = im * a
im = Image.fromarray(im)
im.show()
が、それはあまりにも厄介で非効率に見えます。それは私のイメージの単純な表示のためにあまりにも多くの変換を含んでいます。
また、matplotlib.pyplot
のオプションでcolormap
を使用するようにしましたが、プロセスで紛失し、値の範囲を指定する方法が見つかりませんでした。
- 適切
PIL
またはpillow
を使用して、私の画像を表示するオプションはありますか? - また、
matplotlib
を使用して上記の目標を達成するアプローチは何ですか?
データの正確な表現に本当に関心がないことは明らかです。したがって、上記の方法を使用したラウンドアップエラーは問題になりません。
編集:
それは私のイメージは0から小さい値までの範囲で、グレースケールのものであり、それはどんな明確になり場合:[0, N], N << 255
。
w, h = 20, 20
data = np.zeros((h, w))
data[5:10, 10:20] = 1
data[6:10, 0:15] = 2
data[10:15, 4:15] = 4
# it's displayed as a black image
Image.fromarray(data).show()
# it's displayed as image with distinguishable values
Image.fromarray(data*255/np.amax(data)).show()
'LEN(セット(リスト(im.getdata())))'ラインの目的は何ですか?ところで、PILイメージをNumpy配列に変換する通常の方法は 'np.asarray(img)'です。 –
@PM 2Ring私はちょうどそれを(対話モードで)実際に異なる値があることを確認するために使用します(それはすべて画像表示で黒く表示されます) – Eypros
最大値が11であることがわかっているなら、 'np.amax '。しかしそれとは別に、Imageから 'np.asarray(img)'を使って配列に変換し、それを乗算し、Image.fromarray(im)でImageに変換すると、実際にはかなり効率的です。 –