#include<opencv2/opencv.hpp>
#include<windows.h>
using namespace cv;
using namespace std;
vector <Mat> result;
void setColour(int x) {
HANDLE h = GetStdHandle(-11);
SetConsoleTextAttribute(h, x);
}
int main() {
int right = 0;
int num[10] = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };
FileStorage fsClassifications("G:/桌面/数字识别/训练结果/classifications.xml", FileStorage::READ); // 读取 classifications.xml 分类文件
if (fsClassifications.isOpened() == false) {
cout << "ERROR, 无法打开classifications.xml\n\n";
system("pause");
return 0;
}
Mat matClassificationInts;
fsClassifications["classifications"] >> matClassificationInts; // 把 classifications.xml 中的 classifications 读取进Mat变量
fsClassifications.release(); // 关闭文件
FileStorage fsTrainingImages("G:/桌面/数字识别/训练结果/images.xml", FileStorage::READ); // 打开训练图片文件
if (fsTrainingImages.isOpened() == false) {
cout << "ERROR, 无法打开images.xml\n\n";
system("pause");
return 0;
}
// 读取训练图片数据(从images.xml中)
Mat matTrainingImagesAsFlattenedFloats;
fsTrainingImages["images"] >> matTrainingImagesAsFlattenedFloats; // 把 images.xml 中的 images 读取进Mat变量
fsTrainingImages.release();
// 训练
Ptr<ml::KNearest> kNearest(ml::KNearest::create()); // 实例化 KNN 对象
kNearest->setDefaultK(9);
// 最终调用train函数,注意到两个参数都是Mat类型(单个Mat)
kNearest->train(matTrainingImagesAsFlattenedFloats, ml::ROW_SAMPLE, matClassificationInts);
int j = 0;
for (int i = 0; i < 100; i++) {
char s[100];
sprintf_s(s, "G:/桌面/数字识别/测试集/%d.png", i);
Mat inputMat = imread(s, 0);
Mat matHandWriting;
inputMat.convertTo(matHandWriting, CV_8UC1);
Mat matROICopy = matHandWriting.clone();
vector<vector<Point>> contours;
vector<Vec4i> hierarchy;
findContours(matHandWriting, contours, hierarchy, RETR_EXTERNAL, CHAIN_APPROX_SIMPLE);
Rect boundRect = boundingRect(contours[0]);
Mat numImage = matROICopy(boundRect).clone();
resize(numImage, numImage, Size(40, 40));
/* 这里计算目标图像的HOG特征(方向梯度直方图特征)代替之前用的灰度特征 */
HOGDescriptor* hog = new HOGDescriptor(Size(40, 40), Size(16, 16), Size(8, 8), Size(8, 8), 9);
vector<float> descriptors;
hog->compute(numImage, descriptors);
Mat matROIFlattenedFloat(1, (int)(descriptors.size()), CV_32FC1, descriptors.data());
Mat matCurrentChar(0, 0, CV_32F); // findNearest的结果保存在这里
// 最终调用 findNearest 函数
kNearest->findNearest(matROIFlattenedFloat, 1, matCurrentChar);
//float fltCurrentChar = (float)matCurrentChar.at<float>(0, 0);
int intCurrentChar = (int)matCurrentChar.at<float>(0, 0);
if (j > 9)j = j % 10;
if (num[j] == intCurrentChar) {
right++;
setColour(7);
}
else
setColour(4);
j++;
cout << "第"<<i<<"个字符为:" << intCurrentChar << endl;
}
setColour(15);
cout << "正确数 = " << right<<endl;
cout << "错误数 = " << 100 - right<<endl;
cout << "准确率 = " << (float)right << "%";
int key = waitKey(0);
}
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
基于KNN算法实现手写数字识别完整源码+数据(课程设计).zip 已获导师指导并通过的97分的高分课程设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。 基于KNN算法实现手写数字识别完整源码+数据(课程设计).zip 已获导师指导并通过的97分的高分课程设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。基于KNN算法实现手写数字识别完整源码+数据(课程设计).zip 已获导师指导并通过的97分的高分课程设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。基于KNN算法实现手写数字识别完整源码+数据(课程设计).zip 已获导师指导并通过的97分的高分课程设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。基于KNN算法实现手写数字识别完整源码+数据(课程设计).zip 已获导师指导并通过的97分的高分课程设计项目,可作为课程设计和期末大作业,下载即用无需修改,项目完整确保可以运行。基于KNN算法实现手写数字识别完整源码+数据(课程设计).zip 已获导师指导并通过的97分的
资源推荐
资源详情
资源评论
收起资源包目录
基于KNN算法实现手写数字识别完整源码+数据(课程设计).zip (210个子文件)
源.cpp 3KB
GenData.cpp 2KB
源.cpp 2KB
50.png 581B
60.png 567B
82.png 548B
88.png 538B
86.png 528B
44.png 527B
84.png 519B
4.png 517B
18.png 516B
68.png 515B
49.png 513B
48.png 513B
70.png 513B
80.png 512B
89.png 512B
8.png 512B
81.png 510B
79.png 507B
42.png 506B
88.png 505B
20.png 504B
83.png 503B
64.png 503B
40.png 502B
98.png 498B
38.png 497B
97.png 496B
85.png 492B
6.png 492B
95.png 489B
54.png 489B
78.png 489B
30.png 488B
48.png 488B
3.png 487B
66.png 485B
40.png 484B
63.png 484B
0.png 483B
93.png 483B
1.png 482B
68.png 482B
6.png 482B
58.png 478B
9.png 477B
61.png 475B
98.png 474B
43.png 472B
66.png 472B
99.png 471B
87.png 470B
5.png 470B
96.png 470B
28.png 470B
0.png 470B
69.png 470B
45.png 469B
8.png 469B
62.png 468B
7.png 468B
94.png 467B
9.png 467B
24.png 465B
84.png 464B
59.png 464B
86.png 463B
41.png 461B
89.png 461B
92.png 460B
10.png 460B
14.png 460B
49.png 458B
44.png 458B
39.png 456B
90.png 456B
91.png 455B
46.png 454B
34.png 454B
4.png 453B
2.png 452B
4.png 452B
46.png 450B
67.png 447B
65.png 446B
60.png 443B
36.png 443B
85.png 443B
96.png 443B
19.png 442B
38.png 441B
22.png 440B
16.png 439B
47.png 438B
56.png 437B
33.png 437B
50.png 436B
90.png 436B
共 210 条
- 1
- 2
- 3
猰貐的新时代
- 粉丝: 1w+
- 资源: 2497
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
前往页