使用python求出圖片每個像素的RGB顏色

休息了一個月,從今天開始繼續更新文章!但願你們喜歡。python

最近在研究怎麼破解驗證碼,其中就要利用到識別出像素顏色的技術。git

你也能夠用PS慢慢地進行取樣記錄,但那樣效率很是低下,並且麻煩。github

識別驗證碼須要咱們高效地提取出像素,並將其轉換成黑白二色,這樣纔好進行矢量對比。微信


工具:函數

pillow庫工具

若是你有PyCharm的話,能夠在Preferences內的Project Interpreter中安裝pillow.spa

若你沒有PyCharm.請上網查閱安裝流程,很是簡單。.net


幾個要用到的比較重要的函數(你能夠先跳過,遇到不認識的函數再回來查看):3d


建議直接閱讀PIL的英文文檔:http://effbot.org/imagingbook/image.htmcode


1.image.new(mode,size,color)

使用給定的變量modesize生成新的圖像。mode是圖片模式,如"RGB"、"P"。Size是給定的寬/高二元組,這是按照像素數來計算的。對於單通道圖像,變量color只給定一個值;對於多通道圖像,變量color給定一個元組(每一個通道對應一個值)。


2.im.convert(mode)

將你打開的圖片轉化爲某種格式。


3.im.getpixel(xy)

返回給定位置的像素。


4.im.putpixel(xy,color)

修改給定位置的像素。


5.im.size()

返回兩個元素,寬和高。im.size ⇒ (width, height)

如果變量名.size[0]則即是是寬,size[1]則表示是高


使用的圖片:



from PIL import Image

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

for y in range(im.size[1]):
for x in range(im.size[0]):
pix = im.getpixel((x,y))
print(pix)


運行結果很長,咱們截取一部分:



不得不說Python實在很強大。

不過這樣看實在很麻煩,由於像素這麼多,咱們不可能手動地去分析數據。

若是咱們要算出RGB各個位低於100的數量,咱們能夠這樣作:


from PIL import Image
im = Image.open("1.jpg")
count = 0
for y in range(im.size[1]):
for x in range(im.size[0]):
pix = im.getpixel((x,y))
if(pix[0] < 100 and pix[1] < 100 and pix[2] < 100):
count = count + 1
print(count)


結果是265743.

咱們甚至能夠把它們轉換成別的顏色。

最好是不在原圖上操做,咱們new一個同樣大小的圖片便可。


im2 = Image.new("RGB",im.size,255)


意思是新建一個跟它同樣大的RGB圖片,背景顏色爲紅色。

咱們把剛剛各個位低於100的像素轉化爲白色。


from PIL import Image
im = Image.open("1.jpg")
im2 = Image.new("RGB",im.size,255)
count = 0
for y in range(im.size[1]):
for x in range(im.size[0]):
pix = im.getpixel((x,y))
if(pix[0] < 100 and pix[1] < 100 and pix[2] < 100):
im2.putpixel((x,y),(255,255,255))
im2.show()


結果:



若是咱們對原圖進行修改顏色:




嘛,仍是能夠接受的。




源代碼已經上傳到公衆號的github項目。

之後公衆號的源代碼及圖片都能在這裏找到:https://github.com/Ckend/GongZhongHao


歡迎關注微信公衆號:幻象客

www.huanxiangke.com



本文分享自微信公衆號 - Python實用寶典(pythondict)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索