opencv摄像头识别手写数字的代码
时间: 2023-06-07 21:12:10 浏览: 256
以下是使用OpenCV和Python编写的识别手写数字的代码:
``` python
import cv2
import numpy as np
# 载入训练好的模型
model = cv2.ml.KNearest_create()
model.load('digits_model.xml')
# 摄像头初始化
cap = cv2.VideoCapture(0)
while True:
# 拍摄一张图像
ret, img = cap.read()
# 转换为灰度图像并进行二值化处理
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
blur = cv2.GaussianBlur(gray, (5, 5), 0)
th = cv2.adaptiveThreshold(blur, 255, cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
# 找到数字轮廓
contours, hier = cv2.findContours(th, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
# 遍历每一个轮廓
for c in contours:
# 绘制矩形框
(x, y, w, h) = cv2.boundingRect(c)
cv2.rectangle(img, (x, y), (x+w, y+h), (0, 255, 0), 2)
# 将数字图像转换为28x28像素
roi = th[y:y+h, x:x+w]
roi = cv2.resize(roi, (28, 28), interpolation=cv2.INTER_AREA)
roi = cv2.dilate(roi, (3, 3))
# 将图像转换为模型所需的格式
data = np.reshape(roi, (1, 784)).astype(np.float32)
ret, result, neighbours, dist = model.findNearest(data, k=1)
# 在图像中绘制识别结果
cv2.putText(img, str(int(result[0][0])), (x, y-5), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
# 显示图像
cv2.imshow('camera', img)
# 检测按下的按键
k = cv2.waitKey(1)
if k == 27: # Esc键退出
break
# 释放摄像头并关闭所有窗口
cap.release()
cv2.destroyAllWindows()
```
这段代码使用了KNN算法对手写数字进行识别,首先从摄像头拍摄一张图像,然后将其转换为灰度图像,并进行二值化处理,接着找到数字轮廓,将数字图像转换为28x28像素,在图像中绘制识别结果后显示图像。
阅读全文