import cv2
import numpy as np
import matplotlib.pyplot as plt
#训练数据集
trainData=np.random.randint(0,100,(25,2)).astype(np.float32)
response=np.random.randint(0,2,(25,1)).astype(np.float32)
red=trainData[response.ravel()==0]
plt.scatter(red[:,0],red[:,1],80,'r','^')
blue=trainData[response.ravel()==1]
plt.scatter(blue[:,0],blue[:,1],80,'b','s')
#test
newcomer=np.random.randint(0,100,(10,2)).astype(np.float32)
plt.scatter(newcomer[:,0],newcomer[:,1],80,'g','o')
knn = cv2.ml.KNearest_create()
knn.train(trainData,cv2.ml.ROW_SAMPLE,response)
ret,results,neighbours,dist=knn.findNearest(newcomer,3)
print('results:',results,'\n')
print('neighbours',neighbours,'\n')
print('dist',dist)
results: [[1.]]
neighbours [[1. 1. 1.]]
dist [[130. 260. 261.]]
ocr识别
import cv2
import numpy as np
import matplotlib.pyplot as plt
img=cv2.imread('E:/python/ocr.png',0)
#没20*20为一个数字,图片大小1000*2000,5000个数字
cells=[np.hsplit(row,100) for row in np.vsplit(img,50)]
x=np.array(cells)
#ttaindata
train=x[:,:50].reshape(-1,400).astype(np.float32)
test=x[:,50:100].reshape(-1,400).astype(np.float32)
k=np.arange(10)
train_labels=np.repeat(k,250)[:,np.newaxis]
test_labels=train_labels.copy()
#knn
knn = cv2.ml.KNearest_create()
knn.train(train,cv2.ml.ROW_SAMPLE,train_labels)
ret,results,neighbours,dist=knn.findNearest(test,3)
#
matches=results==test_labels
correct=np.count_nonzero(matches)
accuracy=correct*100/results.size
print(accuracy)
91.64
#save
np.savez(‘knn_data.npz’,train=train,train_labels=train_labels)
with np.load(‘knn_data.npz’) as data:
print (data.files)
train=data[‘train’]
train_labels=data[‘train_labels’]
knn使用图像灰度值
svm与hog分类