博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
opencv中的Bayes分类器应用实例
阅读量:5312 次
发布时间:2019-06-14

本文共 2813 字,大约阅读时间需要 9 分钟。

转载:http://blog.csdn.net/yang_xian521/article/details/6967515

PS:很多时候,我们并不需要特别精通某个理论,而且有的时候即便你非常精通,但是当你真正去用它时,也会错误百出。

      也就是说,要做到会用(这是终极目标),出现问题时,能够快速解决就ok了。对理论的熟悉,可以通过简单的实例来加深。

      最厉害的,往往是那些深入浅出的人。。。

 

openCV中与贝叶斯分类器相关的API函数有以下几个:

(1)CvNormalBayesClassifier::CvNormalBayesClassifier();

该函数为默认构造函数;

(2)CvNormalBayesClassifier::CvNormalBayesClassifier(const Mat& trainData, const Mat& response, const Mat& varIdx=Mat(),const Mat& sampleIdx=Mat());

该函数实际是在默认构造函数内部调用train()函数进行分类器训练;

(3)bool CvNormalBayesClassifier::train(const Mat& trainData, const Mat& response, const Mat& varIdx=Mat(),const Mat& sampleIdx=Mat());

该函数进行贝叶斯分类器的训练,输入向量必须为行向量;变量response必须为整数,但其在初始化时类型可被设置为CV_32FC1;

所有特征向量必须完整,不允许训练样本集的某一个向量存在数据缺失;

(4)float CvNormalBayesClassifier::predict(const Mat& samples, Mat* result=0);

该函数根据用户输入的测试样本的特征向量,返回其所属的类别;注意,如果输入是很多个测试样本的特征向量组成的矩阵,返回值为result矩阵;

 

[cpp] 
  1. //openCV中贝叶斯分类器的API函数用法举例  
  2. //运行环境:winXP + VS2008 + openCV2.3.0  
  3. #include "stdafx.h"  
  4. #include "opencv.hpp"  
  5. #include "iostream"  
  6. using namespace cv;  
  7. using namespace std;  
  8.   
  9. //10个样本特征向量维数为12的训练样本集,第一列为该样本的类别标签  
  10. double inputArr[10][13] =   
  11. {  
  12.     1,0.708333,1,1,-0.320755,-0.105023,-1,1,-0.419847,-1,-0.225806,0,1,   
  13.     -1,0.583333,-1,0.333333,-0.603774,1,-1,1,0.358779,-1,-0.483871,0,-1,  
  14.     1,0.166667,1,-0.333333,-0.433962,-0.383562,-1,-1,0.0687023,-1,-0.903226,-1,-1,  
  15.     -1,0.458333,1,1,-0.358491,-0.374429,-1,-1,-0.480916,1,-0.935484,0,-0.333333,  
  16.     -1,0.875,-1,-0.333333,-0.509434,-0.347032,-1,1,-0.236641,1,-0.935484,-1,-0.333333,  
  17.     -1,0.5,1,1,-0.509434,-0.767123,-1,-1,0.0534351,-1,-0.870968,-1,-1,  
  18.     1,0.125,1,0.333333,-0.320755,-0.406393,1,1,0.0839695,1,-0.806452,0,-0.333333,  
  19.     1,0.25,1,1,-0.698113,-0.484018,-1,1,0.0839695,1,-0.612903,0,-0.333333,  
  20.     1,0.291667,1,1,-0.132075,-0.237443,-1,1,0.51145,-1,-0.612903,0,0.333333,  
  21.     1,0.416667,-1,1,0.0566038,0.283105,-1,1,0.267176,-1,0.290323,0,1  
  22. };  
  23.   
  24. //一个测试样本的特征向量  
  25. double testArr[]=  
  26. {  
  27.     0.25,1,1,-0.226415,-0.506849,-1,-1,0.374046,-1,-0.83871,0,-1  
  28. };  
  29.   
  30.   
  31. int _tmain(int argc, _TCHAR* argv[])  
  32. {  
  33.     Mat trainData(10, 12, CV_32FC1);//构建训练样本的特征向量  
  34.     for (int i=0; i<10; i++)  
  35.     {  
  36.         for (int j=0; j<12; j++)  
  37.         {  
  38.             trainData.at<float>(i, j) = inputArr[i][j+1];  
  39.         }  
  40.     }  
  41.   
  42.     Mat trainResponse(10, 1, CV_32FC1);//构建训练样本的类别标签  
  43.     for (int i=0; i<10; i++)  
  44.     {  
  45.         trainResponse.at<float>(i, 0) = inputArr[i][0];  
  46.     }  
  47.   
  48.     CvNormalBayesClassifier nbc;  
  49.     bool trainFlag = nbc.train(trainData, trainResponse);//进行贝叶斯分类器训练  
  50.     if (trainFlag)  
  51.     {  
  52.         cout<<"train over..."<<endl;  
  53.         nbc.save("c:/normalBayes.txt");  
  54.     }  
  55.     else  
  56.     {  
  57.         cout<<"train error..."<<endl;  
  58.         system("pause");  
  59.         exit(-1);  
  60.     }  
  61.       
  62.   
  63.     CvNormalBayesClassifier testNbc;  
  64.     testNbc.load("c:/normalBayes.txt");  
  65.   
  66.     Mat testSample(1, 12, CV_32FC1);//构建测试样本  
  67.     for (int i=0; i<12; i++)  
  68.     {  
  69.         testSample.at<float>(0, i) = testArr[i];  
  70.     }  
  71.   
  72.     float flag = testNbc.predict(testSample);//进行测试  
  73.     cout<<"flag = "<<flag<<endl;  
  74.   
  75.     system("pause");  
  76.     return 0;  
  77. }  

转载于:https://www.cnblogs.com/hello-yz/p/3182590.html

你可能感兴趣的文章
关于Webapp的注意事项
查看>>
使用JDBC进行数据库的事务操作(2)
查看>>
HDU 3966 Aragorn's Story (树链剖分+线段树)
查看>>
MIME协议(三) -- MIME邮件的组织结构
查看>>
javascript:设置URL参数的方法,适合多条件查询
查看>>
javascript获取URL查询字符串
查看>>
大型网站架构演化(二)——应用服务和数据服务分离
查看>>
最近沉迷生意经
查看>>
BZOJ1787 [Ahoi2008]Meet 紧急集合 LCA
查看>>
ThinkPHP讲解(十二)——文本编辑器和ajax传址
查看>>
MySQL For RedHat Linux(源码安装,附安装包)
查看>>
CSS3新属性
查看>>
jQuery Validate验证框架详解
查看>>
基于GDAL库,读取海洋风场数据(.nc格式)c++版
查看>>
DML语言DDL
查看>>
ajax加php实现三级联动
查看>>
设计模式建议学习顺序
查看>>
ASP.NET中IsPostBack详解
查看>>
补作业:随机生成二元四则运算
查看>>
改变listview中item选中时文字的颜色
查看>>