我一直在下面通過使用快速KNN分類培訓的OpenCV設置的Python OCR例子here。我跟着第一個例子,並生成了一個knn_data.npz
,用於稍後存儲培訓數據和培訓標籤。我想要現在做的是回顧,訓練數據,並將其應用到了它裏面的單個字符的OpenCV的圖像:通在OpenCV的圖像KNearest的find_nearest
# 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'
圖像是10×10英寸的圖像所以它是完美的安全調整和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
不過,我重塑了我的形象,使其佔據一行,並把它轉換成一個浮動,所以我不完全確定爲什麼會出現這個錯誤。有什麼建議麼?