opencv下使用SVM进行简单颜色分类

来源:互联网 发布:淘宝网信用怎么刷 编辑:程序博客网 时间:2024/04/29 19:45

    在opencv下有个SVM的例子,我把那个例子改了改,试试能否对颜色进行分类,下面我给出代码!

<span style="font-size:18px;">#include <opencv2/core/core.hpp>#include <opencv2/highgui/highgui.hpp>#include <opencv2/ml/ml.hpp>#include<iostream>using namespace cv;using namespace std;int main(int argc, char *argv[]){    float labels[6]={1.0, 1.0, 1.0, 0, 0, 0};    Mat labelsMat(6,1,CV_32FC1,labels);//设置输出学习样本    float train_Data[6][3]={ {255,0, 0}, {255,0,0}, {255, 0,0}, {0,0,255 },{0,0,255},{0,0,255}};    Mat train_DataMat(6,3,CV_32FC1,train_Data);//设置输入样本    cout<<train_DataMat<<endl;/*    设置参数*/    CvSVMParams params;    params.svm_type=CvSVM::C_SVC;    params.kernel_type=CvSVM::LINEAR;    params.term_crit=cvTermCriteria(CV_TERMCRIT_ITER,20000,1e-6);    CvSVM SVM;    SVM.train(train_DataMat,labelsMat,Mat(),Mat(),params);//开始训练    /*设定我们测试的数据*/    Mat Red_Mat(100,100,CV_32FC3,Scalar(255,0,0));    circle(Red_Mat,Point(Red_Mat.rows/2,Red_Mat.cols/2),30,Scalar(0,0,255),8);    namedWindow("Test_Image",CV_WINDOW_AUTOSIZE);    imshow("Test_Image",Red_Mat);    uchar *p=Red_Mat.data;    Mat T3_M(Red_Mat.rows*Red_Mat.cols,3,CV_32FC1,p);//转化成一维    Mat T3_Out(Red_Mat.rows*Red_Mat.cols,1,CV_32FC1,0);//设定输出矩阵   // cout<<"T3_Out: "<<T3_Out<<endl;    /*小数据测试*/    float T1[3]={255,0,0},T2[3]={0,0,255};    Mat T1_M(1,3,CV_32FC1,T1);    Mat T2_M(1,3,CV_32FC1,T2);    cout<<"T1: "<<SVM.predict(T1_M)<<endl;    cout<<"T2: "<<SVM.predict(T2_M)<<endl;    cout<<"rows:"<<T3_M.rows<<endl;    /*设定的图像进行测试*/    SVM.predict(T3_M,T3_Out);//进行输出预测,也就是进行数据分类    uchar *p_out=T3_Out.data;    Mat Out_Image(Red_Mat.rows,Red_Mat.cols,CV_32FC1,p_out);//转换成MAT格式进行输出    namedWindow("Out_Image",CV_WINDOW_AUTOSIZE);    imshow("Out_Image",Out_Image);  //  cout<<"T3: "<<Out_Image<<endl;    SVM.save("Red.xml");    waitKey(0);}</span>
但是这仅仅是能够对特殊的颜色分类,只是一个简单的尝试,后面怎么训练还需要技巧!

0 0