基本上照搬了http://lib.csdn.net/article/opencv/30167的代码,只是改了一点bug和增加了一点功能
输入就是直接在一个512*512大小的白色画布上画黑线,然后转化为01矩阵,用knn算法找训练数据中最相近的k个,现在应该是可以对所有字符进行训练和识别,只是训练数据中还只有数字而已,想识别更多更精确的话就需要自己多跑代码多写几百次,现在基本上一个数字写10次左右准确率就挺高了,并且每次识别的时候会将此次识别的数字和01矩阵存入训练数据文件夹中,增加以后识别的正确率,识别错了的话需要输入正确答案来扩充训练数据
/*--------------------------------------------------之前忘了说画完按回车了--------------------------*/
这是效果图:
这是代码
knn.py
from numpy import *
import operator
import time
from os import listdir
def classify(inputPoint,dataSet,labels,k):
dataSetSize = dataSet.shape[0]
diffMat = tile(inputPoint,(dataSetSize,1))-dataSet
sqDiffMat = diffMat ** 2
sqDistances = sqDiffMat.sum(axis=1)
distances =