【发布时间】:2015-12-09 18:43:51
【问题描述】:
我一直在关注示例here,通过使用 kNN 分类训练 OpenCV,为 OCR 设置 Python。我按照第一个示例生成了一个knn_data.npz,用于存储训练数据和训练标签以供以后使用。我现在要做的是回忆训练数据并将其应用于其中包含单个字符的 OpenCV 图像:
# Load training data
trainingData = np.load('knn_data.npz')
train = trainingData['train']
trainLabels = trainingData['train_labels']
knn = cv2.KNearest()
knn.train(train, trainLabels)
letter = cv2.imread('letter.png')
letter = cv2.cvtColor(letter, cv2.COLOR_BGR2GRAY)
print letter.shape
letter = letter.reshape((1,100))
letter = np.float32(letter)
print letter.shape
ret, result, neighbors, dist = knn.find_nearest(letter, k=5)
print result
'letter.png' 图像是 10x10 图像,因此调整大小非常安全,并且 numpy 成功地将图像大小调整为形状 (1, 100) 的一维数组。但是,当我尝试将其传递给 knn.find_nearest(...) 函数时,我收到一个错误,提示要使用浮点矩阵:
OpenCV Error: Bad argument (Input samples must be floating-point matrix (<num_samples>x<var_count>)) in find_nearest, file /build/buildd/opencv-2.4.8+dfsg1/modules/ml/src/knearest.cpp, line 370
Traceback (most recent call last):
File "sudoku.py", line 103, in <module>
ret, result, neighbors, dist = knn.find_nearest(letter, k=5)
cv2.error: /build/buildd/opencv-2.4.8+dfsg1/modules/ml/src/knearest.cpp:370: error: (-5) Input samples must be floating-point matrix (<num_samples>x<var_count>) in function find_nearest
但是,我重新调整了图像的形状,使其占据单行并将其转换为浮点数,因此我不完全确定为什么会出现此错误。有什么建议?
【问题讨论】:
标签: python opencv numpy ocr knn