OpenCV神经网络进行分类


openCV提供了多种机器学习算法如SVM,adaboost,decision tree等,今天研究了一下神经网络,

写了一个简单的例子,以备忘。


问题描述:现有平面上100个随机点,如下图,以红色和蓝色标记为两类,现根据这些点训练一个BP神经网络分类器,将平面上的点分类。


代码如下:

	//从文件载入数据
	ifstream fid("E:\\code\\SmokeDetector\\data.dat",ios::binary);
	float* data = new float[200];
	fid.read((char*)data,sizeof(float)*200);
	Mat trainData(100,2,CV_32FC1,data);
	fid.close();
	//dispMat(trainData);

	ifstream fid2("E:\\code\\SmokeDetector\\label.dat",ios::binary);
	float* label = new float[100];
	fid2.read((char*)label,sizeof(float)*100);
	Mat trainLabel(100,1,CV_32FC1,label);
	fid2.close();
	//dispMat(trainLabel);

	CvANN_MLP bp;
	CvANN_MLP_TrainParams param;
	param.term_crit = cvTermCriteria(CV_TERMCRIT_ITER,10000,0.001);  //设置结束条件
	param.train_method = CvANN_MLP_TrainParams::BACKPROP;		//训练方法采用BackProgation
	param.bp_dw_scale=0.1;
	param.bp_moment_scale=0.1;

	//设置为3层神经网络,1个隐藏层(8个触发节点)
	int layers[3] = {2,8,1}; 
	Mat_<int> layerSize(1,3);
	memcpy(layerSize.data,layers,sizeof(int)*3);


	bp.create(layerSize,CvANN_MLP::SIGMOID_SYM);
	bp.train(trainData,trainLabel,Mat(),Mat(),param);
	bp.save("bpModel.xml"); //save classifier


	Mat testImg(256,256,CV_8UC3);
	Mat sample(1,2,CV_32FC1);
	Mat res;
	Vec3b red(0,0,255),blue(255,0,0);

	for(int i=0;i<testImg.rows;i++)
	{
		for(int j=0;j<testImg.cols;j++)
		{
			
			sample.at<float>(0,0) = i/float(testImg.rows);
			sample.at<float>(0,1) = j/float(testImg.cols);
			bp.predict(sample,res);
			float tmp = ((float*)res.data)[0];;
			if(tmp<0)
				testImg.at<Vec3b>(i,j) = red;
			else
				testImg.at<Vec3b>(i,j) = blue;
		}
	}
	imshow("result",testImg);
	imwrite("result.jpg",testImg);
	cvWaitKey(0);


结果如下:



包含头:

#include "stdafx.h"
#include <opencv2\opencv.hpp>
#include <iostream>
#include <string>
#include <fstream>

using namespace std;
using namespace cv;



  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
OpenCV神经网络植物花草分类的Python代码可以通过以下步骤实现: 1. 导入必要的库和模块,如OpenCV、NumPy、Pandas等。 2. 建立训练数据集和测试数据集。训练数据集应包括多个植物花草的图像,且每个图像都应有对应的标签。测试数据集包括用于评估模型性能的图像。 3. 对数据集进行预处理。可以使用OpenCV库的函数对图像进行缩放、归一化、灰度化等操作,以便提高模型训练的效果。 4. 定义神经网络模型结构。可以选择使用深度学习框架如Keras或TensorFlow建立卷积神经网络(CNN)模型,并定义其层结构和参数。 5. 进行模型训练。使用训练数据集对神经网络模型进行训练,可以设置训练的批次大小、迭代次数等参数。 6. 进行模型测试和评估。使用测试数据集对已训练好的模型进行测试,评估其在未见过的数据上的分类性能,如准确率、召回率等。 7. 对新的植物花草图像进行分类。使用已训练好的模型对新的植物花草图像进行分类,输出预测结果。 总结:以上是一种植物花草分类问题的OpenCV神经网络解决方案的Python代码实现的步骤。其中,关键步骤包括数据集准备、数据预处理、模型定义、模型训练、模型测试和评估、以及应用模型进行分类预测。这一方法可以帮助解决植物花草分类问题,并可以根据需要对代码进行修改和优化。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值