用 svm 训练了个分类器。
给图片分类的。
目标 : 1
else : 0
载入分类器查看效果
- #include"stdafx.h"
- #include"cv.h"
- #include"highgui.h"
- #include<ml.h>
- #include<iostream>
- #include<fstream>
- #include<string>
- #include<vector>
-
- usingnamespacecv;
- namespacestd;
-
- intmain(intargc,char**argv)
- {
- CvSVMsvm=CvSVM();
- svm.load("SVM_DATA.xml",0);
-
-
- //printf("Cantloadurxml!n");
- //}
- CvCapture*video=cvCaptureFromAVI("D:videos.avi");
- IplImage*test=NULL;
- IplImage*trainImg=cvCreateImage(cvSize(64,64),8,3);
- ofstreampredict_txt("SVM_PREDICT.txt");
- intcnt=0;
- cvNamedWindow("video");
- while(1)
- {
- test=cvQueryFrame(video);
- if(test==NULL)
- break;
- }
- else
- charline[512];
- cvZero(trainImg);
- cvResize(test,trainImg);
- HOGDescriptor*hog=newHOGDescriptor(cvSize(64,cvSize(16,16),cvSize(8,8),9);
- vector<float>descriptors;
- hog->compute(trainImg,descriptors,Size(1,1),Size(0,0));
- cout<<"HOGdims:"<<descriptors.size()<<endl;
- CvMat*SVMtrainMat=cvCreateMat(1,descriptors.size(),CV_32FC1);
- intn=0;
- for(vector<float>::iteratoriter=descriptors.begin();iter!=descriptors.end();iter++)
- cvmSet(SVMtrainMat,n,*iter);
- n++;
- intret=svm.predict(SVMtrainMat);
- std::sprintf(line,"Frame:%drn",ret);
- predict_txt<<line;
- if(ret==1)
- CvFontfont;
- cvInitFont(&font,1.0,2,8);
- char*warn="Target!!!";
- cvPutText(test,sun,cvPoint(10,10),&font,CV_RGB(255,0); background-color:inherit">//在窗口中显示warning的红色提示信息
- cvShowImage("video",test);
- cvWaitKey(20);
- }
- cvReleaseImage(&trainImg);
- predict_txt.close();
- system("PAUSE");
- return0;
- }
测试某个 目录 下的图片:
svm.load("F:testSVM_DATA.xml",108); list-style:decimal-leading-zero outside; color:inherit; line-height:18px; margin:0px!important; padding:0px 3px 0px 10px!important"> cout<<"loadxml"<<endl;
- stringbuf;
- IplImage*test;
- vector<string>img_tst_path;
- ifstreamimg_tst("F:testtest.txt");
- while
(img_tst)
- if(getline(img_tst,buf))
- img_tst_path.push_back(buf);
- img_tst.close();
- //需要分析的图片,这里默认设定图片是64*64大小,所以上面定义了1764,如果要更改图片大小,可以先用debug查看一下descriptors是多少,然后设定好再运行
- CvMat*test_hog=cvCreateMat(1,1764,CV_32FC1);
- charline[512];
- ofstreampredict_txt("F:testSVM_PREDICT.txt");(string::size_typej=0;j!=img_tst_path.size();j++)
- test=cvLoadImage(img_tst_path[j].c_str(),1);
- cout<<"cannotloadtheimage:"<<img_tst_path[j].c_str()<<endl;
- continue;
- cvZero(trainImg);
- cvResize(test,0); background-color:inherit">//读取图片
- HOGDescriptor*hog=
- vector<//结果数组
- hog->compute(trainImg,0); background-color:inherit">//调用计算函数开始计算
- cout<<"HOGdims:"<<descriptors.size()<<endl;
- CvMat*SVMtrainMat=cvCreateMat(1,CV_32FC1);
- n=0;
- float>::iteratoriter=descriptors.begin();iter!=descriptors.end();iter++)
- cvmSet(SVMtrainMat,*iter);
- n++;
- //获取最终检测结果,这个predict的用法见OpenCV的文档
- std::sprintf(line,"%s%drn",img_tst_path[j].c_str(),ret);
- predict_txt<<line;
- predict_txt.close();
- cvReleaseImage(&trainImg);
- system("PAUSE");
- return0;
- }
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|