2012-02-22 13 views
4

PILモジュールでPythonを使用してすべてを選択する方法はありますか?私はこれがGimpで実現できることを知っています。できるだけ小さくアプリケーションをパッケージ化しようとしていますが、GIMPインストールはEUのオプションではありません。Python/PILなどを使用して空白を縮小する

画像が2つあるとします.1つは400x500、もう1つは200x100です。それらはどちらも白で、各画像の境界のどこかに100x100のテキストブロックがあります。私がしようとしているのは、そのテキストの周りの空白を自動的に取り除き、さらに100x100のイメージ・テキストブロックを変数に読み込んで、それ以上テキストを抽出することです。

これは明らかに単純ではないため、画像全体でテキスト抽出を実行するだけでは機能しません。基本的なプロセスについて質問したかっただけです。このトピックについては、Googleではあまり利用できません。解決したら、おそらく他の人にも役立つかもしれません...

読んでいただきありがとうございます!

答えて

8

画像をnumpyの配列に入れると、PILを使用してトリミングするエッジを簡単に見つけることができます。ここで私は空白が色(255,255,255)であることを仮定している、あなたのニーズに合わせて調整することができます

from PIL import Image 
import numpy as np 

im = Image.open("test.png") 
pix = np.asarray(im) 

pix = pix[:,:,0:3] # Drop the alpha channel 
idx = np.where(pix-255)[0:2] # Drop the color when finding edges 
box = map(min,idx)[::-1] + map(max,idx)[::-1] 

region = im.crop(box) 
region_pix = np.asarray(region) 

は、結果がどのように見えるかを示すために、私はあなたがの大きさを見ることができる上軸ラベルを残してきましたbox地域:

from pylab import * 

subplot(121) 
imshow(pix) 
subplot(122) 
imshow(region_pix) 
show() 

enter image description here

1

一般的なアルゴリズムは、左上のピクセルの色を見つけて、その色のピクセルが見つからなくなるまで内側のスパイラルスキャンを実行することです。これにより、境界ボックスの1つのエッジが定義されます。各エッジのもう1つを押すまでスキャンを続けます。

+0

ブリリアント!だから本質的に、私はおそらくその期待ピクセルの色の範囲を設定し、しきい値を微調整することができます... – user1145643

0

http://blog.damiles.com/2008/11/basic-ocr-in-opencv/

いくつかの助けになるかもしれません。このチュートリアルで説明されている単純なバウンディングボックスメソッドや@Tyler Eavesらせんの提案を使用することもできます

+0

リンクありがとう、私はpythonのopencvをチェックアウトします! – user1145643

関連する問題