]>
<< 明けまして | main | Pythonの多次元リストをどのように作るべきか >>
PIL(Python Imaging Library) は、Pythonインタープリタ用の画像処理ライブラリ群。これを使うとPythonで多くの形式のファイルを読み取って相互に変換できたり、非常に便利。
例えば、RGB画像を開いてその画素値を配列で取得するには、
import Image filename = "xxx.xxx" im = Image.open(filename) print list(im.getdata())
輝度表現に変換。
im = im.convert("L")
print list(im.getdata())
輪郭検出フィルタを適用して保存。
import ImageFilter im_contour = im.filter(ImageFilter.CONTOUR) savefilename = "yyy.yyy" im_contour.save(savefilename)
フィルタを自分で定義することもできます。ImageFilter.CONTOURは8方向ラプラシアンフィルタ(画素値の変化分の変化分を検出)ですが、4方向のものが使いたいときには、
from ImageFilter import BuiltinFilter
class LAP4CONTOUR(BuiltinFilter):
name = "Lap4Contour"
filterargs = (3, 3),1, 255, (
0, -1, 0,
-1, 4, -1,
0, -1, 0
)
im_l4contour = im.filter(LAP4CONTOUR)
im_l4contour.save(savefilename)
また、簡単なフィルタはクラスにしなくても作れます。下は4方向ラプラシアンを用いた鮮鋭化フィルタ。
from ImageFilter import Kernel f = Kernel((3,3), (0, -1, 0, -1, 5, -1, 0, -1, 0), 1, 0) im_l4edge = im.filter(f) im_l4edge.save(savefilename)
それぞれの値の意味は、
class SomeFilter(BuiltinFilter):
name = "SomeFilter"
filterargs = matrixsize, scale, offset, matrix
f = Kernel(matrixsize, matrix, scale, offset)
# matrixsize フィルタ行列の大きさをあらわすタプル (3,3) または (5,5)
# matrix : フィルタ行列
# scale : フィルタ後の画素値はscaleで除算される 省略された場合はフィルタ行列の和
# offset : scaleで除算した後、この値を足す 下地の画素値
http://www.panopticon.jp/mt/mt-tb.cgi/102
[Python][お勉強] Python入門(36) - モジュールのインポート Pythonで「〜」をエンコードすると例外が発生 The beauty... [続きを読む]
コメントする