1
回答
opencv svm 疑问求助
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   
请教各位大侠:
    我用opencv(3.0版)的SVM进行分类时,svm->(traindata, ROW_SAMPLE, labels)函数进行分类时,traindata的数据格式必须是CV_32FC1,且labels的数据格式为CV_32SC1,换成其他数据格式,则运行错误,这是为什么?此外,数据格式按照上面的要求定义后,为什么使用response=svm->predict(testMat)进行分类时,response的值往往不是预期的类型,而是绝对值很大的整数或负数,如1.07794e+009,跪求解答。全部代码如下所示:
#include <string.h>
#include<string>
#include<iostream>
#include<opencv2/ml.hpp>
#include <opencv2/core/core.hpp> 
using namespace std;
using namespace cv;
using namespace cv::ml;

int main(){
        // step 1:  
        //训练数据的分类标记,即4类
        float labels[16] = { 1.0, 1.0, 1.0, 1.0, 2.0, 2.0, 2.0, 2.0, 3.0, 3.0, 3.0, 3.0, 4.0, 4.0, 4.0, 4.0 };
        Mat labelsMat = Mat(16, 1, CV_32SC1, labels);
        //训练数据矩阵
        float trainingData[16][2] = { { 0, 0 }, { 4, 1 }, { 4, 5 }, { -1, 6 }, { 3, 11 }, { -2, 10 }, { 4, 30 }, { 0, 25 }, { 10, 13 }, { 15, 12 }, { 25, 40 }, { 11, 35 }, { 8, 1 }, { 9, 6 }, { 15, 5 }, { 20, -1 } };
        Mat trainingDataMat = Mat(16, 2, CV_32FC1, trainingData);
        //------------设置支持向量机的参数---------------------
        // opencv3.0 
        Ptr<ml::SVM> svm = ml::SVM::create();
        svm->setType(SVM::C_SVC);
        svm->setKernel(SVM::RBF);
        svm->setC(100);
        svm->setGamma(1);
        svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, (int)1e7, 1e-6));//终止准则函数:当迭代次数达到最大值时终止 
        // -----训练-------
        printf("\n-----------------starting to train data by SVM----------------\n";
        svm->train(trainingDataMat, ROW_SAMPLE, labelsMat);

        // step 4:  
        //使用训练所得模型对新样本进行分类测试
        for (int i = -5; i<15; i++)
        {
                for (int j = -5; j<15; j++)
                {
                        float a[] = { i, j };
                        Mat sampleMat = Mat(1, 2, CV_32FC1, a);
                        cout << "sampleMat = " << sampleMat << endl;
                        float response = svm->predict(sampleMat);
                        cout << response << " ";
                }
                cout << endl;
        }
        return 0;
}
举报
jovahe
发帖于2年前 1回/309阅
顶部