wangzhibo
2022-03-23 f974d1d3e4c89cf1d89f86e50170ebfb93a6445a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# 构建手写数字OCR的应用程序
#
# 需要一些 train_data 和 test_data。 OpenCV 附带一个图像digits.png,其中有 5000 个手写数字(每个数字 500 个)。每个数字都是一个 20x20 的图像。、
# 第一步是将这个图像分成 5000 个不同的数字。对于每个数字,我们将其展平为 400 像素的一行。那就是我们的特征集,即所有像素的强度值。这是我们可以创建的最简单的功能集。
# 第二部使用每个数字的前 250 个样本作为 train_data,剩下的250 个样本作为 test_data
# 然后训练数据;
 
import numpy as np
import cv2
 
image = cv2.imread('1/1.jpg',0)
image.resize(20,20)
ret, image = cv2.threshold(image, 0, 255, cv2.THRESH_OTSU | cv2.THRESH_BINARY_INV)
testImage = image.reshape(-1,400).astype(np.float32)
 
# 用所有数据作为训练数据
knn=cv2.ml.KNearest_load('knn_data.npz')
img_pre=knn.predict(image)
print(img_pre)
ret,result,neighbours,dist = knn.findNearest(testImage, 3)
print(result)