tetsunosukeのnotebook

tetsunosukeのメモです

PILで文字画像を抜き出す

初めてのPIL。
もっとカンタンに書けるかもしれないけど無理やり。

こんなデータから
f:id:kidd-number5:20130604192047j:plain

白い部分を取り除いてこんなかんじにする
f:id:kidd-number5:20130604192112j:plain

# -*- coding: utf-8 -*-

from PIL import Image
from numpy import *

im = Image.open("test.jpg")

# とりあえず配列にする
pixel_array = array(im)

x = []
y = []
for i in range(0, im.size[0]):
    for j in range(0, im.size[1]):
        # 白以外のピクセルを探索
        # ここはもう少しゆるいしきい値でも良いと思う
        if pixel_array[i][j].tolist() != [255, 255, 255]:
            y.append(i)
            x.append(j)

# x, yそれぞれの最大最小が白以外に初めて出る色。
# そのまま切るとジャストで切れちゃうから2ピクセルくらいのバッファを確保            
buffer = 2
left = min(x) - buffer
top = min(y) - buffer
right = max(x) + buffer
bottom = max(y) + buffer

# 切り取って保存
cropped_im = im.crop((left, top, right, bottom))
cropped_im.save("cropped.jpg")

これで手書き文字認識とかもできるのかもしれないとちょっと夢が広がった。