opencv实现数字识别代码
时间: 2023-09-22 15:07:44 浏览: 89
opencv数字识别
以下是使用 OpenCV 实现数字识别的 Python 代码示例:
```python
import cv2
import numpy as np
from sklearn import svm
# 加载数字图像和标签
def load_digits():
digits = cv2.imread('digits.png', 0)
labels = np.loadtxt('digits_label.txt', np.int)
return digits, labels
# 对数字图像进行预处理
def preprocess(digits):
# 二值化
ret, thresh = cv2.threshold(digits, 0, 255, cv2.THRESH_BINARY_INV+cv2.THRESH_OTSU)
# 分割图像为单独的数字
contours, hierarchy = cv2.findContours(thresh, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
rects = [cv2.boundingRect(contour) for contour in contours]
rects.sort()
# 对每个数字图像进行归一化
normalized_digits = []
for rect in rects:
x, y, w, h = rect
roi = thresh[y:y+h, x:x+w]
resized_roi = cv2.resize(roi, (20, 20), interpolation=cv2.INTER_AREA)
normalized_digits.append(resized_roi.reshape(-1))
return normalized_digits
# 训练 SVM 分类器
def train_svm(digits, labels):
clf = svm.SVC(kernel='linear', C=1)
clf.fit(digits, labels)
return clf
# 预测数字
def predict_digit(clf, digit):
return clf.predict([digit])
# 加载数字图像和标签
digits, labels = load_digits()
# 对数字图像进行预处理
normalized_digits = preprocess(digits)
# 训练 SVM 分类器
clf = train_svm(normalized_digits, labels)
# 加载测试图像
test_img = cv2.imread('test.png', 0)
# 对测试图像进行预处理
test_digit = preprocess(test_img)[0]
# 预测数字
predicted_digit = predict_digit(clf, test_digit)
print('Predicted digit:', predicted_digit)
```
需要注意的是,这个示例代码仅供参考,实际应用中还需要根据具体情况进行适当的调整和优化。
阅读全文