web-dev-qa-db-ja.com

RGBイメージをグレースケールに変換し、ピクセルデータをpython

グレースケールイメージに変換したいRGBイメージがあるので、各ピクセルに1つの数値(0から1の間)を設定できます。これにより、画像のピクセルと同じ次元の行列が得られます。次に、このマトリックスに対していくつかの操作を行い、この操作されたマトリックスから新しいグレースケールイメージを生成します。これどうやってするの?

11
lovespeed

私は頻繁に画像をNumPy配列として扱います-私はそのようにします:

import numpy as np
from PIL import Image

x=Image.open('im1.jpg','r')
x=x.convert('L') #makes it greyscale
y=np.asarray(x.getdata(),dtype=np.float64).reshape((x.size[1],x.size[0]))

<manipulate matrix y...>

y=np.asarray(y,dtype=np.uint8) #if values still in range 0-255! 
w=Image.fromarray(y,mode='L')
w.save('out.jpg')

操作後に配列値yが0〜255の範囲になくなった場合は、16ビットTIFFにステップアップするか、単純に再スケーリングできます。

-アルド

16
Aldo