4.Opencv svm生成是否戴眼镜的模型

博客介绍使用支持向量机(SVM)生成是否戴眼镜的模型,称效果不错,并提及实现代码有两个入参,分别为训练集和测试集文件名。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用svm生成是否戴眼镜的模型,感觉效果还不错。

具体实现的代码如下:

#include <iostream>

#include <opencv2/core.hpp>

#include <opencv2/imgproc.hpp>

#include "opencv2/imgcodecs.hpp"

#include <opencv2/highgui.hpp>

#include <opencv2/ml.hpp>

 

using namespace cv;

using namespace cv::ml;

using namespace std;

 

 

int main(int argc ,char ** argv)

{

    /////////////////

    string filename = argv[1];////the name of cvs file

    string testFileName = argv[2];

 

    //--------------------- 1. Set up training data randomly ---------------------------------------

    /////////get trainData and labels from cvs file

    Ptr<TrainData> Samples;

    Samples = TrainData::loadFromCSV(filename.c_str(), 0);

    Mat trainDataGet  = Samples->getTrainSamples();

    Mat labelsGet   = Samples->getTrainResponses();

    Mat trainData(trainDataGet.rows, trainDataGet.cols, CV_32FC1);

    Mat labels(labelsGet.rows, labelsGet.cols, CV_32SC1);

    

    trainDataGet.convertTo(trainData, CV_32FC1);

    labelsGet.convertTo(labels, CV_32SC1);

    printf("\n%d,%d,%d\n", labels.rows, labels.cols, labels.channels());

    printf("\n%d,%d,%d\n", trainData.rows, trainData.cols, trainData.channels());

 

//    cout<<labelsGet<<endl;

  //  cout<<labels<<endl;

 

 

    //------------------------ 2. Set up the support vector machines parameters --------------------

    //------------------------ 3. Train the svm ----------------------------------------------------

    cout << "Starting training process" << endl;

    //! [init]

    Ptr<SVM> svm = SVM::create();

    svm->setType(SVM::C_SVC);

    svm->setGamma(3);

    svm->setC(0.1);

    svm->setKernel(SVM::LINEAR);

svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, (int)1e7, 1e-6));

    //! [init]

    //! [train]

    svm->train(trainData, ROW_SAMPLE, labels);

    //! [train]

    cout << "Finished training process" << endl;

 

    //--------------------- 4. Set up predict  data randomly ---------------------------------------

    /////////get trainData and labels from cvs file

    Ptr<TrainData> SamplesTest;

    SamplesTest = TrainData::loadFromCSV(testFileName.c_str(), 0);

    Mat TestDataGet  = SamplesTest->getTrainSamples();

    Mat TestData(TestDataGet.rows, TestDataGet.cols, CV_32FC1);

 

    TestDataGet.convertTo(TestData, CV_32FC1);

    printf("\n%d,%d,%d\n", TestData.rows, TestData.cols, TestData.channels());

 

    //------------------------ 5. predict and print results  ----------------------------------------

    for(int i = 0; i < TestData.rows; i++)

    {

        float response = svm->predict(TestData.row(i));

 

        printf("*****%d********%f   \n", i,  response);

    }

    //------------------------ 6. save model  ----------------------------------------

    FileStorage  modelFile("./svm.yml", FileStorage::WRITE);

    svm->write(modelFile);

 

    waitKey(0);

}

                                       

 

其中,第一个入参是训练集的文件名,第二个入参是测试集的文件名。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值