opencv 基于SVM的几何形状识别
2016-09-08 15:37
471 查看
很多时候,findcontours之后,得到一个封闭的几何形状,如果知道是圆,那就想办法参数化表达圆,如果知道是矩形,相应的想办法参数化表达矩形。当我们开发好简单的直线或者圆的参数化表达算法后,会发现,如何知道是圆还是直线,成为一个迫切需要解决的问题。
本文博文利用SVM实现几何形状的识别。目前只支持cirlce rectangle triangle cross四种。了解其中的原理和思路后,想要支持更多几何形状的识别,我相信,并不是难事。
话不多说,先要部分代码。
1、得到训练的数据
好吧,展示的部分代码就到此为止。
下面给出整个工程以及训练样本的下载。vs2013+opencv2.4.13可直接运行。下载链接
效果如图所示
本文博文利用SVM实现几何形状的识别。目前只支持cirlce rectangle triangle cross四种。了解其中的原理和思路后,想要支持更多几何形状的识别,我相信,并不是难事。
话不多说,先要部分代码。
1、得到训练的数据
void getData() { trainData.create(train_samples*classes, sampleSize.width*sampleSize.height, CV_32FC1); trainClasses.create(train_samples*classes, 1, CV_32FC1); Mat src_image; char file[255]; int i, j; for (i = 0; i<classes; i++) { for (j = 0; j< train_samples; j++) { sprintf(file, "samples/s%d/%d.png", i, j); src_image = imread(file, 0); if (src_image.empty()) { printf("Error: Cant load image %s\n", file); //exit(-1); } Mat image = readImageSaveContour(src_image); Mat imageNewSize; resize(image, imageNewSize, sampleSize, CV_INTER_LINEAR); image.release(); image = imageNewSize.reshape(1, 1); image.convertTo(trainData(Range(i*train_samples + j, i*train_samples + j + 1), Range(0, trainData.cols)), CV_32FC1); trainClasses.at<float>(i*train_samples + j, 0) = i; } } }2、申明一个SVM类,并训练
CvSVMParams SVM_params; // CvSVMParams结构用于定义基本参数 SVM_params.svm_type = CvSVM::C_SVC; // SVM类型 SVM_params.kernel_type = CvSVM::LINEAR; // 不做映射 SVM_params.degree = 0; SVM_params.gamma = 1; SVM_params.coef0 = 0; SVM_params.C = 1; SVM_params.nu = 0; SVM_params.p = 0; SVM_params.term_crit = cvTermCriteria(CV_TERMCRIT_ITER, 1000, 0.01); CvSVM SVM; SVM.train(trainData, trainClasses, Mat(), Mat(), SVM_params);
好吧,展示的部分代码就到此为止。
下面给出整个工程以及训练样本的下载。vs2013+opencv2.4.13可直接运行。下载链接
效果如图所示
相关文章推荐
- 基于OpenCV的 SVM算法实现数字识别(二)---SVM原理
- 【OpenCV学习笔记】【教程翻译】一(基于SVM和神经网络的车牌识别概述)
- 基于 OpenCV 的 LBP + SVM 人脸识别
- 基于OpenCV的 SVM算法实现数字识别(三)---SMO求解
- 基于OpenCV的 SVM算法实现数字识别(四)---代码实现
- OpenCV自学笔记18. 基于SVM和神经网络的车牌识别(二)
- svm 行人识别 训练 基于Opencv
- OpenCV自学笔记20. 基于SVM和神经网络的车牌识别(四)
- OpenCV自学笔记17. 基于SVM和神经网络的车牌识别(一)
- 【opencv机器学习】基于SVM和神经网络的车牌识别
- OpenCV中几何形状识别与测量
- OpenCV自学笔记19. 基于SVM和神经网络的车牌识别(三)
- 基于opencv中HOG+SVM的车轮识别及predict()函数的改进
- 基于Opencv库中SVM模块的MNIST手写字识别数据库识别
- 基于opencv的手写数字识别(MFC,HOG,SVM)
- 基于opencv的手写数字识别(MFC,HOG,SVM)
- 基于OpenCV的 SVM算法实现数字识别(一)---理论基础
- 【SVM理论到实践4】基于OpenCv中的SVM的手写体数字识别
- 基于OpenCV的PHP图像人脸识别技术
- 基于OpenCV的车牌识别系统之三 ——字符分割与识别(川字分割)