Pythonで画像処理をするには,opencvなどのライブラリが有名みたいですが,単純な画像処理ならばPillowというライブラリが簡単みたいなので,使い方をまとめておきます.
環境 : Python3.4.2 on Mac OS X 10.10.3
リンク
インストール
$ sudo pip3 install pillow
画像読み込み
from PIL import Image
img = Image.open("background.png")
if img.mode != "RGB":
img = img.convert("RGB")
width, height = img.size
print(width, height)
img.show()
出力
> 850 1200
> #画像が新規ウインドウで表示される.
画像の保存
img.save("pillow-output.png")
でファイル形式までちゃんと面倒を見てくれる.
画像のピクセル処理
getpixel()とputpixel()を使う.
from PIL import Image
img = Image.open("test.jpg")
if img.mode != "RGB":
img = img.convert("RGB")
width, height = img.size
print(width, height)
img.show()
img.save("pillow-output-1.png")
for x in range(width):
for y in range(height):
r, g, b = img.getpixel((x, y))
img.putpixel((x, y), (255-g, b, r))
img.show()
img.save("pillow-output-2.png")
出力
ただし,これだとPythonでforを大量に回すことになり,大きな画像の処理には向かない.高速化のためにNumpyを使う.
インストール
$ sudo pip3 install numpy
Numpyを使った画像処理
array = 255-array という部分で,Numpyですべてのピクセルの計算ができる.とても高速で簡単である.
from PIL import Image
import numpy
img = Image.open("test.jpg")
if img.mode != "RGB":
img = img.convert("RGB")
width, height = img.size
print(width, height)
img.save("pillow-output-3.png")
array = numpy.asarray(img)
array = 255-array
res = Image.fromarray(numpy.uint8(array))
res.save("pillow-output-4.png")
出力
素晴らしい.