您好,欢迎来到小侦探旅游网。
搜索
您的当前位置:首页在Opencv下的BP神经网络的搭建

在Opencv下的BP神经网络的搭建

来源:小侦探旅游网
调用BP进行图像分类只需:

img0=cvLoadImage(\"099.pbm\",0); BPClassifierbp_cly;//初始化对象. number=bp_cly.classify(img0);

#include

CvANN_MLP BP;//opencv中的BP //构造函数

BPClassifier::BPClassifier() {

//initial

//sprintf(file_path , \"../OCR/\"); sprintf(file_path , \"C:\\\\Users\\\\y450\\\\Desktop\\\\recognize\\\\OCR\\\\\"); train_samples = 80; classes= 10; size=40;

trainData = cvCreateMat(train_samples*classes, size*size, CV_32FC1);

trainClasses = cvCreateMat(train_samples*classes, 10, CV_32FC1); neuralLayers=cvCreateMat(3,1,CV_32SC1);

sampleWts=cvCreateMat(train_samples*classes,1,CV_32FC1); for (inti=0;icvSet1D(sampleWts,i,cvScalar(1)); }

cvSet1D(neuralLayers,0,cvScalar(size*size)); cvSet1D(neuralLayers,1,cvScalar(5));

cvSet1D(neuralLayers,2,cvScalar(10));//10个输出 //Get data (get images and process it) getData(); train();

//BP.load(\"bp.xml\"); //或者调用训练好的数据,把getDate()和train() //注释掉 printf(\"

---------------------------------------------------------------\\n\"); printf(\"|\Class\|\Precision\|\Accuracy\|\\n\"); printf(\"

---------------------------------------------------------------\\n\");

}

//取得样本数据

voidBPClassifier::getData() {

IplImage* src_image; IplImageprs_image; CvMatrow,data; charfile[255]; inti,j;

for(i =0; ifor( j = 0; j//Load file if(j<10)

sprintf(file,\"%s%d/%d0%d.pbm\",file_path, i, i , j); else

sprintf(file,\"%s%d/%d%d.pbm\",file_path, i, i , j); src_image = cvLoadImage(file,0); if(!src_image) {

printf(\"Error: Cant load image %s\\n\", file); //exit(-1); }

//process file

prs_image = preprocessing(src_image, size, size);

//Set class label

cvGetRow(trainClasses, &row, i*train_samples + j); cvSet(&row,cvScalarAll(0));

cvSet2D(&row,0,i, cvRealScalar(1)); //Set data

cvGetRow(trainData, &row, i*train_samples + j);

IplImage* img = cvCreateImage( cvSize( size, size ), IPL_DEPTH_32F, 1 );

//convert 8 bits image to 32 float image

cvConvertScale(&prs_image, img, 0.0039215, 0);

cvGetSubRect(img, &data, cvRect(0,0, size,size));

CvMatrow_header, *row1;

//convert data matrix sizexsize to vecor

row1 = cvReshape( &data, &row_header, 0, 1 ); cvCopy(row1, &row, NULL); } }

//训练

voidBPClassifier::train() {

BP.create(neuralLayers); printf(\" 训练中\\n\"); BP.train(trainData, trainClasses,

sampleWts, 0,

CvANN_MLP_TrainParams(cvTermCriteria(CV_TERMCRIT_ITER+CV_TERMCRIT_EPS,300,0.01),CvANN_MLP_TrainParams::BACKPROP,0.01) );

printf(\" 训练结束\\n\"); BP.save(\"bp.xml\"); }

//分类

floatBPClassifier::classify(IplImage* img) {

IplImageprs_image; CvMatdata;

CvMat* nearest=cvCreateMat(1,10,CV_32FC1); cvSet(nearest,cvScalarAll(0));

floatresult; //process file

prs_image = preprocessing(img, size, size);

//Set data IplImage* img32 = cvCreateImage( cvSize( size, size ), IPL_DEPTH_32F, 1 );

cvConvertScale(&prs_image, img32, 0.0039215, 0); cvGetSubRect(img32, &data, cvRect(0,0, size,size));

CvMatrow_header, *row1;

row1 = cvReshape( &data, &row_header, 0, 1 ); cvSet(nearest,cvScalarAll(0)); BP.predict(row1,nearest); CvPointmax={0,0};

cvMinMaxLoc(nearest,NULL,NULL,NULL,&max,NULL); //PrintMatrix(nearest,1,10);

intbest=max.x;

return (float)best; }

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- xiaozhentang.com 版权所有 湘ICP备2023022495号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务