手写数字图片二值化转换为32*32数组。
生活随笔
收集整理的這篇文章主要介紹了
手写数字图片二值化转换为32*32数组。
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近課設外加生病,本來打算在上一篇機器學習使用k-近鄰算法改進約會網站的配對效果。就打算寫的一直沒有時間。按照《機器學習實戰》的流程,手寫數字識別是kNN中的最后一部分,也是一個比較經典的案例。但是書中是直接使用32*32的二值化(只有1和0)數組進行計算的,書中也并沒有講解如何將手寫數字轉化為32*32的數組,這方面網上已經有很多資料了,所以只做了一個簡單的二值化處理。
主要的流程就是將圖片打開之后,進行降噪處理,然后將其灰度化,最后設置一個闕值將其二值化保存到一個32*32的數組中。
# @Time : 2017/12/15 18:11 # @Author : Leafage # @File : imgTo01.py # @Software: PyCharmfrom PIL import Image import matplotlib.pylab as plt import numpy as npdef picTo01(filename):"""將圖片轉化為32*32像素的文件,用0 1表示:param filename::return:"""# 打開圖片img = Image.open(filename).convert('RGBA')# 得到圖片的像素值raw_data = img.load()# 將其降噪并轉化為黑白兩色for y in range(img.size[1]):for x in range(img.size[0]):if raw_data[x, y][0] < 90:raw_data[x, y] = (0, 0, 0, 255)for y in range(img.size[1]):for x in range(img.size[0]):if raw_data[x, y][1] < 136:raw_data[x, y] = (0, 0, 0, 255)for y in range(img.size[1]):for x in range(img.size[0]):if raw_data[x, y][2] > 0:raw_data[x, y] = (255, 255, 255, 255)# 設置為32*32的大小img = img.resize((32, 32), Image.LANCZOS)# 進行保存,方便查看img.save('test.png')# 得到像素數組,為(32,32,4)array = plt.array(img)# 按照公式將其轉為01, 公式: 0.299 * R + 0.587 * G + 0.114 * Bgray_array = np.zeros((32, 32))# 行數for x in range(array.shape[0]):# 列數for y in range(array.shape[1]):# 計算灰度,若為255則白色,數值越小越接近黑色gary = 0.299 * array[x][y][0] + 0.587 * array[x][y][1] + 0.114 * array[x][y][2]# 設置一個闕值,記為0if gary == 255:gray_array[x][y] = 0else:# 否則認為是黑色,記為1gray_array[x][y] = 1# 得到對應名稱的txt文件name01 = filename.split('.')[0]name01 = name01 + '.txt'# 保存到文件中np.savetxt(name01, gray_array, fmt='%d', delimiter='')if __name__ == '__main__':picTo01('3.png')手寫數字的原圖片:
運行程序之后中間生成的黑白32*32的圖片:
最后生成的32*32的二值化數組:
總結
以上是生活随笔為你收集整理的手写数字图片二值化转换为32*32数组。的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天龙八部——目录五首词
- 下一篇: KIEL 5如何烧录程序到STM32芯片