参考
小魏的修行路
http://blog.csdn.net/xiaowei_cqu/article/details/9027617
文中向量坐标选择的不太直观,所以简单修改了一下
关于opencv 神经网络函数的一些可以参考 water_93的博客
http://blog.csdn.net/water_93/article/details/51244987
CvANN_MLP::predict(constMat&inputs,Mat&outputs)
在这篇中提到图像进行特征提取,把它保存在inputs里,通过调用predict函数,我们得到一个输出向量,它是一个1*nClass的行向量,其中每一列说明它与该类的相似程度(0-1之间),也可以说是置信度。我们只用对output求一个最大值,就可得到结果。
以下程序CvANN_MLP::predict只有一个输出,label中有3类,0,1,2,分开这三类用相邻两类的均值,0.5,1.5
//编程环境:VS2012 + Opencv2.4.9
#include
#include
#include
using namespace cv;
using namespace std;
#define COUNT 21 //读入的点个数
int main()
{
//从文件载入数据
float data[COUNT][2];
ifstream fin1("data.txt");
for(int i=0;i>data[i][0];
fin1>>data[i][1];
}
fin1.close();
//显示读入的数据
for(int i=0;icout<0]<<" ";
cout<1]<<" "<float label[COUNT][1];
ifstream fin2("label.txt");
for(int i=0;i>label[i][0];
}
fin2.close();
//显示读入的数据
for(int i=0;icout<
label.txt
0
1
0
1
0
0
0
1
0
1
1
1
0
1
1
2
2
1
0
0
2
data.txt
100 250
250 450
150 160
300 420
210 120
90 20
70 60
330 210
80 200
400 120
420 200
300 300
50 130
270 300
320 310
490 450
480 480
420 400
250 250
230 270
400 300
结果
神经网络Mat layerSizes=(Mat_(1,3) << 2,8,1);
神经网络Mat layerSizes=(Mat_(1,4) << 2,8,8,1);
感觉这样分类也是可以的啊~
以下程序CvANN_MLP::predict有3个输出,label中有3类,按照water_93的博客编写
//编程环境:VS2012 + Opencv2.4.9
#include
#include
#include
using namespace cv;
using namespace std;
#define COUNT 21 //读入的点个数
int main()
{
//从文件载入数据
float data[COUNT][2];
ifstream fin1("data.txt");
for(int i=0;i>data[i][0];
fin1>>data[i][1];
}
fin1.close();
//显示读入的数据
for(int i=0;icout<0]<<" ";
cout<1]<<" "<float label[COUNT][3];
ifstream fin2("label2.txt");
for(int i=0;i>label[i][0];
fin2>>label[i][1];
fin2>>label[i][2];
}
fin2.close();
//显示读入的数据
for(int i=0;icout<
data.txt同上
label2.txt
1 0 0
0 1 0
1 0 0
0 1 0
1 0 0
1 0 0
1 0 0
0 1 0
1 0 0
0 1 0
0 1 0
0 1 0
1 0 0
0 1 0
0 1 0
0 0 1
0 0 1
0 1 0
1 0 0
1 0 0
0 0 1
结果
神经网络 Mat layerSizes=(Mat_(1,3) << 2,8,3);
神经网络 Mat layerSizes=(Mat_(1,4) << 2,8,8,3);
后者的代码已上传,见链接:
http://download.csdn.net/detail/qq_15947787/9515042