参考:http://blog.csdn.net/qq_15947787/article/details/51385861 和 http://www.cnblogs.com/denny402/p/5032232.html
上面两文都是opencv2 在vc环境下的例子,下面是我在 ios9中,用opencv2.4.13版做的练习,并且运用了xml特征文件的存取。
效果如下:
(ps:这次练习的目的判断图片上每个像素应该是红色还是蓝色,离黑点近就是红色,离白点近就是蓝色)
首先是在ANNTrain()中用测试点训练神经网络,把训练结果保存bpModel.xml,然后在ANNTest()中加载特征文件bpModel.xml,判断图片上的颜色。
@property NSString* recordFilePath;
- (void)viewDidLoad {
_recordFilePath= [ [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject] stringByAppendingPathComponent:@"bpModel.xml"];
//第一步 训练
[self ANNTrain];
//第二步 测试
//[self ANNTest];
}
//训练神经网络
-(void)ANNTrain{
// Set up training data
float labels[10][2] = {
{0.9,0.1},{0.1,0.9},{0.9,0.1},{0.1,0.9},{0.9,0.1},{0.9,0.1},{0.1,0.9},{0.1,0.9},{0.9,0.1},{0.9,0.1}};
//这里对于样本标记为0.1和0.9而非0和1,主要是考虑到sigmoid函数的输出为一般为0和1之间的数,只有在输入趋近于-∞和+∞才逐渐趋近于0和1,而不可能达到。
Mat labelsMat(10, 2, CV_32FC1, labels);
float trainingData[10][2] = { {11,12},{111,112}, {21,22}, {211,212},{51,32}, {71,42}, {441,412},{311,312}, {41,62}, {81,52} };
Mat trainingDataMat(10, 2, CV_32FC1, trainingData);
Mat layerSizes=(Mat_<int>(1,5) << 2, 2, 2, 2, 2); //5层&#