用 svm 训练了个分类器。
给图片分类的。
目标 : 1
else : 0
载入分类器查看效果
-
#include "stdafx.h"
-
#include "cv.h"
-
#include "highgui.h"
-
#include <ml.h>
-
#include <iostream>
-
#include <fstream>
-
#include <string>
-
#include <vector>
-
-
using namespace cv;
-
using namespace std;
-
-
-
int main(int argc, char** argv)
-
{
-
-
-
CvSVM svm = CvSVM();
-
svm.load("SVM_DATA.xml", 0);
-
-
-
-
-
-
-
CvCapture *video = cvCaptureFromAVI("D:\\video\\s.avi");
-
IplImage *test = NULL;
-
IplImage* trainImg=cvCreateImage(cvSize(64,64),8,3);
-
-
ofstream predict_txt( "SVM_PREDICT.txt" );
-
int cnt = 0;
-
-
cvNamedWindow( "video");
-
-
while(1)
-
{
-
test = cvQueryFrame(video);
-
if(test == NULL)
-
{
-
break;
-
}
-
else
-
{
-
-
-
char line[512];
-
cvZero(trainImg);
-
cvResize(test,trainImg);
-
HOGDescriptor *hog=new HOGDescriptor(cvSize(64,64),cvSize(16,16),cvSize(8,8),cvSize(8,8),9);
-
vector<float> descriptors;
-
hog->compute(trainImg, descriptors,Size(1,1), Size(0,0));
-
cout<<"HOG dims: "<<descriptors.size()<<endl;
-
CvMat* SVMtrainMat=cvCreateMat(1,descriptors.size(),CV_32FC1);
-
int n = 0;
-
for(vector<float>::iterator iter=descriptors.begin();iter!=descriptors.end();iter++)
-
{
-
cvmSet(SVMtrainMat,0,n,*iter);
-
n++;
-
}
-
-
int ret = svm.predict(SVMtrainMat);
-
std::sprintf( line, "Frame : %d\r\n", ret );
-
predict_txt<<line;
-
-
if(ret == 1)
-
{
-
CvFont font;
-
cvInitFont(&font,0,1.0,1.0,0,2,8);
-
char* warn=" Target!!!";
-
cvPutText(test, sun,cvPoint(10,10),&font,CV_RGB(255, 0, 0));
-
}
-
-
cvShowImage("video", test);
-
cvWaitKey(20);
-
}
-
}
-
-
cvReleaseImage( &trainImg);
-
predict_txt.close();
-
system("PAUSE");
-
-
return 0;
-
}
测试某个 目录 下的图片:
-
#include "stdafx.h"
-
#include "cv.h"
-
#include "highgui.h"
-
#include <ml.h>
-
#include <iostream>
-
#include <fstream>
-
#include <string>
-
#include <vector>
-
-
using namespace cv;
-
using namespace std;
-
-
-
int main(int argc, char** argv)
-
{
-
-
-
CvSVM svm = CvSVM();
-
svm.load("F:\\test\\SVM_DATA.xml", 0);
-
-
-
-
-
-
cout<<" load xml"<<endl;
-
-
string buf;
-
int n = 0;
-
IplImage *test;
-
vector<string> img_tst_path;
-
ifstream img_tst( "F:\\test\\test.txt" );
-
while( img_tst )
-
{
-
if( getline( img_tst, buf ) )
-
{
-
img_tst_path.push_back( buf );
-
}
-
}
-
img_tst.close();
-
-
-
IplImage* trainImg=cvCreateImage(cvSize(64,64),8,3);
-
-
CvMat *test_hog = cvCreateMat( 1, 1764, CV_32FC1 );
-
char line[512];
-
ofstream predict_txt( "F:\\test\\SVM_PREDICT.txt" );
-
for( string::size_type j = 0; j != img_tst_path.size(); j++ )
-
{
-
test = cvLoadImage( img_tst_path[j].c_str(), 1);
-
if( test == NULL )
-
{
-
cout<<" can not load the image: "<<img_tst_path[j].c_str()<<endl;
-
continue;
-
}
-
-
cvZero(trainImg);
-
cvResize(test,trainImg);
-
HOGDescriptor *hog=new HOGDescriptor(cvSize(64,64),cvSize(16,16),cvSize(8,8),cvSize(8,8),9);
-
vector<float>descriptors;
-
hog->compute(trainImg, descriptors,Size(1,1), Size(0,0));
-
cout<<"HOG dims: "<<descriptors.size()<<endl;
-
CvMat* SVMtrainMat=cvCreateMat(1,descriptors.size(),CV_32FC1);
-
n=0;
-
for(vector<float>::iterator iter=descriptors.begin();iter!=descriptors.end();iter++)
-
{
-
cvmSet(SVMtrainMat,0,n,*iter);
-
n++;
-
}
-
-
int ret = svm.predict(SVMtrainMat);
-
std::sprintf( line, "%s %d\r\n", img_tst_path[j].c_str(), ret );
-
predict_txt<<line;
-
}
-
predict_txt.close();
-
-
-
cvReleaseImage(&trainImg);
-
-
system("PAUSE");
-
-
return 0;
-
}
测试 svm 训练的xml 分类器 ~,布布扣,bubuko.com
测试 svm 训练的xml 分类器 ~
原文:http://blog.csdn.net/yingchunhua365/article/details/24490561