OPENCV中SVM机器学习功能的简单示例

原创 2017年03月30日 10:54:51

最近在搞机器学习,使用SVM机器学习,解决了工作中的一个文本分类的任务,使用复旦大学的语料库测试,准确率还是很高的,觉得SVM太好用了。

技痒之下忍不住要分享,但肯定不能把工作的代码放到这里来,所以我写了一个有启发的示例程序上来供大家参考。

使用这个示例程序的前置条件是:要安装配置好OpenCV的开发环境。本示例程序的开发环境是VS2015。示例程序如下:


#include "opencv2\core.hpp"
#include "opencv2\imgproc.hpp"
#include "opencv2\imgcodecs.hpp"
#include "opencv2\highgui.hpp"
#include "opencv2\ml.hpp"

using namespace cv;
using namespace cv::ml;

int main(int, char**)
{
	int width = 512, height = 512;						//512*512 的正方形区域
	Mat image = Mat::zeros(height, width, CV_8UC3);

	int labels[8] = { 1, 1, 0, 0, 1, 1, 0, 0};			//8 个结果
	Mat labelsMat(8, 1, CV_32SC1, labels);

	float trainingData[8][2] = { {10, 10},				//8 样本点(和结果对应)
								 {10, 50},
								 {501, 255},
								 {500, 501},
								 {40,30},
								 {70, 60},
								 {300,300},
								 {60, 500} };
	Mat trainingDataMat(8, 2, CV_32FC1, trainingData);

	Ptr<SVM> svm = SVM::create();
	svm->setType(SVM::C_SVC);			// 类型
	svm->setKernel(SVM::LINEAR);		// 核函数
	Ptr<TrainData> td = TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat); //样本是按行排列的
	
	svm->train(td);		//训练

	Vec3b green(0, 255, 0), blue(255, 0, 0);
	Mat sampleMat(1, 2, CV_32F);
	float response;
	// 预测512*512正方形区域内的每个点的归类
	for (int i = 0; i < image.rows; ++i)
		for (int j = 0; j < image.cols; ++j)
		{
			sampleMat.at<float>(0, 0) = i;
			sampleMat.at<float>(0, 1) = j;
			response = svm->predict(sampleMat);

			if (response == 1)		//1画绿色
				image.at<Vec3b>(i, j) = green;
			else if (response == 0)	//0画蓝色
				image.at<Vec3b>(i, j) = blue;
		}

	// 标出样本点的位置
 	int thickness = -1;
 	int lineType = 8;
	int x, y;
	Scalar s;
	for (int i = 0; i < 8; i++) {
		if (labels[i]) {
			s = Scalar(255, 0, 255);
		} else {
			s = Scalar(255, 255, 0);
		}
		x = trainingData[i][0];
		y = trainingData[i][1];
		circle(image, Point(x, y), 5, s, thickness, lineType);
	}

	imshow("SVM Simple Example", image); 
	return waitKey(0);
}

程序的运行效果如下:


[机器学习]基于OpenCV实现最简单的数字识别

http://blog.csdn.net/jinzhuojun/article/details/8579416 本文将基于OpenCV实现简单的数字识别。这里以游戏Angry Birds为例,通过以...
  • wanglang3081
  • wanglang3081
  • 2013年11月22日 15:20
  • 42867

opencv中的机器学习简单使用

OpenCV的ml模块实现了很多算法,包括朴素贝叶斯、K近邻、SVM、决策树、Boosting、GBT、随机森林、神经网络等。其大多继承自同一基类,训练和预测的接口都是train(),predict(...
  • jhszh418762259
  • jhszh418762259
  • 2017年03月03日 18:13
  • 2776

[机器学习]基于OpenCV实现最简单的数字识别

本文将基于OpenCV实现简单的数字识别。这里以游戏Angry Birds为例,通过以下几个主要步骤对其中右上角的分数部分进行自动识别。...
  • ariesjzj
  • ariesjzj
  • 2013年11月13日 18:43
  • 16725

opencv SVM处理问题实例讲解

  • 2014年07月15日 20:39
  • 473KB
  • 下载

学习SVM(一) SVM模型训练与分类的OpenCV实现

学习SVM(一) SVM模型训练与分类的OpenCV实现 学习SVM(二) 如何理解支持向量机的最大分类间隔 学习SVM(三)理解SVM中的对偶问题 学习SVM(四) 理解SVM中的支持向量(S...
  • chaipp0607
  • chaipp0607
  • 2017年03月29日 21:47
  • 9652

OpenCV 机器学习之 支持向量机的用法实例

用支持向量机进行文理科生的分类,依据的特征主要是 数学成绩与语文成绩,这两个特征都服从高斯分布 程序代码如下: #include #include using namespace ...
  • zhjm07054115
  • zhjm07054115
  • 2014年06月10日 22:27
  • 1757

[机器学习]opencv

explanation: 这里我们简单谈谈xml和yaml文件输入,你的输出只有一个这种extension,而structure来自于此。有两种data structure, 你可能serial...
  • Liuqz2009
  • Liuqz2009
  • 2015年08月13日 23:18
  • 562

【OpenCV3.3】SVM与字符分类示例

SVM,全称Support Vector Machine,即支持向量机,是机器学习中常用的分类器(同样支持向量回归),属监督式学习的一种。         在二值分类中,SVM通过寻找一个 决策最优分...
  • rrrfff
  • rrrfff
  • 2017年08月22日 14:02
  • 9110

opencv SVM示例代码

#include #include #include #include #include "time.h" using namespace std; using namespace cv; ...
  • Gone_HuiLin
  • Gone_HuiLin
  • 2016年11月19日 08:42
  • 234

OPENCV中SVM机器学习功能的简单示例

SVM支持向量机,机器学习,示例程序。
  • zjq9931
  • zjq9931
  • 2017年03月30日 10:54
  • 395
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OPENCV中SVM机器学习功能的简单示例
举报原因:
原因补充:

(最多只允许输入30个字)