本文采用Python实现KNN算法对手写体数字图片进行分类并预测结果
参考文章:https://blog.csdn.net/asialee_bird/article/details/81051281
https://blog.csdn.net/zhili8866/article/details/53026269
https://2723364262.iteye.com/blog/2311663
一.文件格式
二.思路分析
1.首先将所有图片转化为灰度图,因为转为单通道后第一可以减少计算量,第二python中部分图像处理函数只支持单通道图片输入。
2.原始数据集0-9放在了9个文件夹中,并且命名无序,所以第二步我将所有图片按上图格式重命名并放入一个文件夹中。注意:图像批量重命名的时候要保证数字位数相同。
3.将图像分为训练集和测试集,我的一共400张图片,350张训练,50张测试,分别放入不同的文件夹中。
4.将图像转为数组,代码测试文件内容,判断是否预测成功
注:批量转换灰度图,批量重命名文件,批量移动文件详细代码参考我的这篇博客:图像处理(批量重命名,批量转为灰度图,批量移动,批量转为数组)
三.代码实现
"""
批量将图像转为一维数组存储后,运用knn进行手写数字图像分类识别
"""
import os
import numpy as np
from PIL import Image # 导入Image模块
from os import listdir
from sklearn.neighbors import KNeighborsClassifier as KNN
# from pylab import * # 导入savetxt模块
# 以下代码可以读取文件夹下所有文件
# def getAllImages(folder):
# assert os.path.exists(folder)
# assert os.path.isdir(folder)
# imageList = os.listdir(folder)
# imageList = [os.path.abspath(item) for item in imageList if os.path.isfile(os.path.join(folder, item))]
# return imageList
# print getAllImages(r"D:\\test")
def get_imlist(path): # 此函数读取特定文件夹下的bmp格式图像
return [os.path.join(path, f) for f in os.listdir(path) if f.endswith('.bmp')]
c1 = get_imlist("C:\\Users\\Tony.Hsu\\Desktop\\writingTest\\trainingSetGray")
print(c1)