2013-09-22 7 views
5

私はPython Imaging Libraryを使って単純なビットマップイメージを解析する方法を疑問に思っていました(ビットマップには太い黒い線が表示されています)。黒い線が見つかったときにメッセージを出力することがあります。PILを使用して、Pythonでビットマップイメージを分析する方法は?

すべてのサンプルコードは大きな助けになります。

+0

ちょっと、私はいくつかのコード例で答えを更新しました。乾杯! – pandita

答えて

8

画像を(赤、青、緑)のrgbに変換できます。例えば、ここから画像を取得します:(680,646)

https://github.com/panditarevolution/PIL_Play/blob/master/blackline.jpg

import PIL 

# The conversion should work equally with a bitmap 
img = PIL.Image.open("blackline.jpg") 
rgb_im = img.convert('RGB') 

rgb_im.size 

これはピクセル数でサイズを返します。 rgb_im.getpixel((x,y))xが水平になり、yが上から下に垂直になると、個々のピクセルの色を照会することができます。

だから最初の行は、すべてが黒(またはほとんど黒)、あなたはこのような何かを行うことができているかどうかを確認するには:1行目の画素の

# Get the first row rgb values 
first_row = [rgb_im.getpixel((i,0)) for i in range(rgb_im.size[0])] 
# Count how many pixels are black. Note that jpg is not the cleanest of all file formats. 
# Hence converting to and from jpg usually comes with some losses, i.e. changes in pixel values. 
first_row.count((0,0,0)) # --> 628 
len(first_row) #--> 680 

680分の628 = 92%は黒です。

のは私を与えるset(first_row)との最初の行のすべての発生の色を確認してみましょう:だから

{(0, 0, 0), 
(0, 0, 2), 
(0, 1, 0), 
(1, 0, 0), 
(1, 1, 1), 
(2, 2, 0), 
(2, 2, 2), 
(4, 4, 2), 
(4, 4, 4), 
(5, 5, 3), 
(5, 7, 6), 
(6, 6, 4), 
(7, 7, 5), 
(14, 14, 12), 
(14, 14, 14), 
(35, 36, 31), 
(52, 53, 48), 
(53, 54, 46), 
(63, 64, 59), 
(64, 65, 60), 
(66, 67, 61), 
(68, 69, 61), 
(76, 77, 71), 
(79, 82, 65), 
(94, 96, 83), 
(96, 98, 87), 
(99, 101, 90), 
(101, 103, 92)} 

約8%の非黒画素が存在する場合であっても、我々はこれらのほとんどはかなりモノクロであることを見ることができ、すなわち灰色の陰影; rgbの値は各色ごとにお互いにかなり接近しています。

PILの良いチュートリアルはここにあります: http://effbot.org/imagingbook/

基本的な概要はここで見つけることができます: http://infohost.nmt.edu/tcc/help/pubs/pil.pdf

ボーナスとして、それは良いことだかどうか(あるいはそれがカバーするかどうかを知らなくても、 PIL)には、 "Programming Computer Vision with Python"という無料のドラフトがあります。 http://programmingcomputervision.com/

+0

ありがとう、あなたはとてもうまく説明しました! – Unknowen

関連する問題