数字识别python opencv
时间: 2023-10-08 16:11:59 浏览: 39
数字识别是一种常见的计算机视觉任务,可以通过使用Python和OpenCV库来实现。以下是一个简单的数字识别示例:
```python
import cv2
import numpy as np
# 加载训练好的数字分类器
classifier = cv2.ml.KNearest_create()
classifier.load('trained_digits.xml')
# 读取测试图像
image = cv2.imread('test_image.png', cv2.IMREAD_GRAYSCALE)
# 对图像进行预处理
image = cv2.GaussianBlur(image, (5, 5), 0)
_, image = cv2.threshold(image, 0, 255, cv2.THRESH_BINARY_INV + cv2.THRESH_OTSU)
# 查找图像中的轮廓
contours, _ = cv2.findContours(image.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 对每个轮廓进行数字识别
for contour in contours:
(x, y, w, h) = cv2.boundingRect(contour)
# 提取数字区域并调整大小
roi = image[y:y+h, x:x+w]
roi = cv2.resize(roi, (28, 28))
roi = np.reshape(roi, (1, 28*28)).astype(np.float32)
# 使用KNN分类器进行预测
_, result, _, _ = classifier.findNearest(roi, k=1)
# 在图像上绘制识别结果
cv2.putText(image, str(int(result[0][0])), (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)
cv2.rectangle(image, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 显示结果图像
cv2.imshow('Result', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
在上面的示例中,我们首先加载训练好的数字分类器(如KNN分类器),然后读取待识别的图像。接下来,我们对图像进行预处理,例如应用高斯模糊和二值化操作。然后,我们使用`findContours`函数查找图像中的轮廓。对于每个轮廓,我们提取数字区域并调整大小为28x28像素。最后,我们使用分类器进行预测,并在图像上绘制识别结果。
请注意,上述示例仅提供了一个基本框架,实际应用中可能需要更复杂的预处理和分类方法。此外,您还需要准备合适的训练数据来训练分类器,可以使用MNIST等数字数据集来进行训练。