knn识别字母
来源:互联网 发布:知乎日报源码 编辑:程序博客网 时间:2024/06/14 04:06
#include "stdafx.h"DECLAREGLOBAL /* 预处理数据 */Mat procrssimg(Mat& img){ int g_nStructElementSize = 1; //结构元素(内核矩阵)的尺寸 //获取自定义核 Mat element = getStructuringElement(MORPH_RECT, Size(2 * g_nStructElementSize + 1, 2 * g_nStructElementSize + 1), Point(g_nStructElementSize, g_nStructElementSize)); Mat image; img.copyTo(image); /* 放大4倍 */ resize(image, image, Size(image.cols * 4, image.rows * 4)); cvtColor(image, image, COLOR_BGR2GRAY); /* 灰度化图片 */ threshold(image, image, 150, 255, CV_THRESH_BINARY_INV); /* 二值化图片 */ //threshold(gray, gray, 150, 255, CV_THRESH_BINARY); /* 二值化图片 */ dilate(image, image, element); erode(image, image, element); medianBlur(image,image, 5); /* 中值平滑处理 */ return image;} float trainingData[1700][16*32]; int knnnumtrain(LPCTSTR file1){ //Mat image = imread(file1); //Mat gray = procrssimg(image); //vector<vector<cv::Point>> contours; //vector<cv::Point> maxContour; //Mat tmp; //gray.copyTo(tmp); //cv::Mat imgRoi; //findContours(tmp, contours, CV_RETR_EXTERNAL, CV_CHAIN_APPROX_NONE); //printf("轮廓数量:%d\n", contours.size()); //vector<cv::Rect> maxR; //for (int i = 0; i < contours.size(); i++){ // maxContour = contours[i]; // Rect maxRect = boundingRect(maxContour); // maxR.push_back(maxRect); //} //printf("maxR size:%d\n", maxR.size()); ///* 排序 */ //for (int i = 0; i < maxR.size()-1; i++){ // for (int j = i + 1; j < maxR.size(); j++){ // printf("[i x]:%d [j x]:%d\n", maxR[i].x, maxR[j].x); // if (maxR[i].x>maxR[j].x){ // Rect tmp = maxR[i]; // maxR[i] = maxR[j]; // maxR[j] = tmp; // } // } //} //This variable will be loaded with a set of images to perform PCA on. vector<FILELABELCHAR> charBank; int num = 0; Mat src; //vector<FILELABEL> faceBank; //vector<CString> nonFaceBank; GetSubCharDirFiles("C:\\img\\charSamples", charBank,0); for (int i = 0; i < charBank.size(); i++){ ///* 设置ROI区域 */ //Rect maxRect = maxR[i]; //imgRoi = gray(maxRect); //uchar *p = imgRoi.data; /* 画上边框 */ //rectangle(image, maxRect, Scalar(0, 255, 0)); //rectangle(gray, maxRect, Scalar(255)); /* 大小归一化处理 */src = imread((LPCTSTR)charBank[i].name,0); resize(src, src, Size(16, 32)); //printf("rows:%d cols:%d\n", imgRoi.rows, imgRoi.cols); /* char ss[20]; sprintf(ss, "c:\\img\\fortemp\\%d.jpg", i); imwrite(ss, imgRoi);*/ /* 计算特征 */int k=0; for (int j = 0; j < 16; j++){ for (int z = 0; z < 32; z++){ trainingData[i][k++] = src.at<uchar>(z , j); } } } Mat trainingDataM(1700, 16 * 32, CV_32FC1,trainingData); float responses[34] = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A','B','C','D','E','F','G','H'/*,'I'*/,'J','K','L','M','N'/*,'O'*/,'P','Q','R','S','T','U','V' ,'W','X','Y','Z'}; float resp[34*50]; int i,j;for(i=0;i<34;i++){for(j=0;j<50;j++){resp[i*50+j]=responses[i];}}Mat trainingDataR(1700, 1, CV_32FC1,resp); KNearest knn; knn.train(trainingDataM, trainingDataR, Mat(), false, 1700); float imageS[16 * 32]; Mat imageTest = imread(file1,0); resize(imageTest, imageTest, Size(16, 32));int k=0; for (int i = 0; i < 16; i++){ for (int j = 0; j < 32; j++){ imageS[k++] = imageTest.at<uchar>(j ,i); } } Mat trainingDataS(1, 16 * 32, CV_32FC1,imageS); char r = knn.find_nearest(trainingDataS,1); DLGPRINT("%c", (char)r); //imshow("test", image); // imshow("gray", gray); // waitKey(); return 0;}
0 0
- knn识别字母
- KNN手写数字识别
- Knn 手写识别
- KNN算法-手写识别
- KNN识别手写体数字
- 【Python-Opencv】KNN英文字母识别
- KNN算法 手写识别 python
- tensorflow实现KNN识别MNIST
- 使用KNN算法识别数字
- 使用KNN算法手写体识别
- KNN之手写数字识别
- 神经网络识别字母+数字
- knn-2 利用knn算法实现手写数字识别
- 学习KNN(三)KNN+HOG实现手写数字识别
- 机器学习实战kNN之手写识别
- 机器学习实战kNN之手写识别
- 机器学习实战kNN之手写识别
- Python 手写数字识别-knn算法应用
- 博客做完了 以后可能都会在自己的博客里面写 不过还没有上线
- 母函数
- 【玲珑杯 1053】【概率DP】Gemstone digger
- 通过apktool和逆向助手反编译apk
- 无穷级数判敛方法使用限制
- knn识别字母
- 和日期有关的类、Math类、Random类
- echo print() print_r() var_dump()的区别
- 在Latex中,我向看看我的宏是如何展开的,咋办?
- Ajax全接触(笔记)
- Android开发之在子线程中使用Toast
- HDU ACM 11 2084 数塔、水题
- Kotlin学习笔记之基础语法一
- 面向使用的软件开发方法:使用、可用性及用户界面