opencv 手写选择题阅卷 (二)字符识别
2018-06-17 23:58:28来源:未知 阅读 ()
opencv 手写选择题阅卷 (二)字符识别
选择题基本上只需要识别ABCD和空五个内容,理论上应该识别率比较高的,识别代码参考了网上搜索的代码,因为参考的网址比较多,现在也弄不清是参考何处的代码了,在这里就不一一感谢了.
基本步骤:
一,识别函数接受一般64X64的灰度图像;
二,二值化并反色为黑底白字;
三,找出字符的最小包围矩形,并大小归一化为32X32;
四,计算图像的HOG特征;
五,用SVM分类器对HOG特征进行识别,从而确定当前图像属于ABCD还是空白;
整个识别代码还是比较简单的.这得得益于opencv 对分类器的封装,除了图像预处理代码,实际识别代码只有几行;
部分代码
CvSVM svm; int svm_inited = 0; int svm_init(char * data_filename) { svm.load(data_filename);//"HOG_SVM_DATA.xml" svm_inited = 1; return 0; } // int svm_recognition(IplImage* image) { if (svm_inited != 1){ return -1; } //预处理 IplImage* test_img = cvCreateImage(cvSize(32, 32), 8, 1); preproc_img(image, test_img);//处理为黑底白字,并大小归一化 #ifdef _WIN32 cvShowImage("Image", test_img); cvWaitKey(0); #endif //特征提取 HOGDescriptor *hog = new HOGDescriptor(cvSize(32, 32), cvSize(16, 16), cvSize(8, 8), cvSize(8, 8), 9); vector<float> descriptors;//存放结果 hog->compute(test_img, descriptors, Size(1, 1), Size(0, 0)); //Hog特征计算 cvReleaseImage(&test_img);//释放不需要的图像,释放内存 //生成要检测的特征数据矩阵 CvMat * mat_samples = cvCreateMat(1, descriptors.size(), CV_32FC1); int n = 0; for (vector<float>::iterator iter = descriptors.begin(); iter != descriptors.end(); iter++) { cvmSet(mat_samples, 0, n, *iter); n++; } //识别 int ret = svm.predict(mat_samples);//检测结果 cvReleaseMat(&mat_samples); return ret; }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- OpenCV开发笔记(五十九):红胖子8分钟带你深入了解分水岭 2020-05-24
- opencv-12-高斯滤波-双边滤波(附C++代码实现) 2020-05-10
- opencv-11-中值滤波及自适应中值滤波 2020-05-03
- 手写快读 2020-04-28
- opencv调用nu-book/zxing-cpp识别二维码 2020-03-26
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash