opencv python knn



Opencv Python Knn



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,' ') print('neighbours',neighbours,' ') print('dist',dist)

画像
結果:[[1。]]

隣人[[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 is a number, the picture size is 1000*2000, 5000 numbers 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
画像

#セーブ
np.savez( ‘knn_data.npz’、train = train、train_labels = train_labels)
データとしてnp.load( ‘knn_data.npz’)を使用:
印刷(data.files)
train = data [‘train’]
train_labels = data [‘train_labels’]

Knnは画像のグレー値を使用します
svmと豚の分類