我想知道如何使用Python Imaging Library來分析一個簡單的位圖圖像(比如位圖頂部有一條粗黑線),以告訴程序是圖像的頂部。當找到黑線時可能會輸出一條消息。如何分析python中的位圖圖像,使用PIL?
任何示例代碼將是一個很大的幫助。
我想知道如何使用Python Imaging Library來分析一個簡單的位圖圖像(比如位圖頂部有一條粗黑線),以告訴程序是圖像的頂部。當找到黑線時可能會輸出一條消息。如何分析python中的位圖圖像,使用PIL?
任何示例代碼將是一個很大的幫助。
你可以將圖片轉換爲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
變爲垂直,從上到下我相信。
所以首先要檢查的行是否是全黑(或大多是黑色的),你可以做這樣的事情:第一行中的像素的
# 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
六百八十○分之六百二十八= 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),有一個免費的草稿「用Python編程計算機視覺」可以在這裏獲得: http://programmingcomputervision.com/
非常感謝,你解釋得非常好! – Unknowen
嘿,那裏,我用一些示例代碼更新了我的答案。乾杯! – pandita