將圖片轉化為文字的一種實現方法

本文介紹一種將圖片轉化為文字的實現方法

在很多時候,我們需要把圖片轉化成文字,然後再進一步處理。比如,在網站登入時候,可能會遇到需要輸入驗證碼,如何讓程式能夠自動識別驗證碼並進行登入驗證?

其中一種方法就是可以將驗證碼的圖片進行下載,然後將圖片轉化成一種文字,再利用一些機器學習的演算法將文字進行內容處理,得到圖片中的內容。

下面以下圖為例,將圖片中的“123”轉化為文字儲存。
這裡寫圖片描述

使用到的Python模組包為:Pillow(PIL)
Pillow是Python的一個影象處理庫,常用用法如下:

Image類
Pillow中最重要的類就是Image,該類存在於同名的模組中。可以通過以下幾種方式例項化:從檔案中讀取圖片,處理其他圖片得到,或者直接建立一個圖片。

使用Image模組中的open函式開啟一張圖片:

from PIL import Image
im=Image.open('123.jpg')

如果開啟成功,返回一個Image物件,可以通過物件屬性檢查檔案內容:

print(im.format, im.size, im.mode)
PPM (512, 512) RGB

format屬性定義了影象的格式,如果影象不是從檔案開啟的,那麼該屬性值為None;size屬性是一個tuple,表示影象的寬和高(單位為畫素);mode屬性為表示影象的模式,常用的模式為:L為灰度圖,RGB為真彩色,CMYK為pre-press影象。
如果檔案不能開啟,則丟擲IOError異常。

當有一個Image物件時,可以用Image類的各個方法進行處理和操作影象,例如顯示圖片:

im.show()

讀寫圖片
Pillow庫支援相當多的圖片格式。直接使用Image模組中的open()函式讀取圖片,而不必先處理圖片的格式,Pillow庫自動根據檔案決定格式。
Image模組中的save()函式可以儲存圖片,除非你指定檔案格式,那麼檔名中的副檔名用來指定檔案格式。
如:將圖片儲存為”123_new.png”

im.save('123_new.png')

獲取圖片尺寸

im.size  #返回結果為二元元組(width,height)

獲取圖片畫素顏色

im.getpixel((a,b)) #a,b分別代表width和height,返回結果為三元元組,GRB格式顏色,如:白色(255,255,255) ,黑色(0,0,0)

重置圖片大小

new=im.resize((a,b)) #a,b為新設定的圖片大小
new.save('new.png')

程式碼示例

#匯入Image方法
from PIL import Image
#開啟圖片
im=Image.open('123.jpg')
#獲取圖片寬和高
width=im.size[0]
height=im.size[1]
#將圖片轉化為文字,在每個畫素點處用數字和空白字元替換
fh=open('123.txt','w')
for i in range(height):
for j in range(width):
#獲取(j,i)畫素點顏色
col=im.getpixel((j,i))
colsum=col[0] col[1] col[2]
if(colsum==0):
#黑色
fh.write('1')#在黑色畫素點處用數字1代替
else:
fh.write(' ')#在非黑色畫素點處用空格代替
fh.write('\n')
fh.close()

處理結果
這裡寫圖片描述