opencv_SVM分類器小筆記_L1





【程式碼】








#include <stdio.h>
#include<iostream>
#include <ctype.h>
#include <opencv2\opencv.hpp>
#include<opencv2\highgui\highgui.hpp>
#include<opencv2/ml/ml.hpp>

using namespace cv;
using namespace std;

int main(int argc, char** argv)
{
    CvSVMParams params; //設定 SVM 參數用的物件

    //以下設定 SVM 參數
    params.svm_type = CvSVM::C_SVC;
    params.kernel_type = CvSVM::RBF; //Kernel Function 推薦使用 RBF
    params.gamma = 3;
    params.C = 100;

    const int num_data = 5; //資料數
    const int num_column = 2; //欄位數

    Mat training_mat(num_data, num_column, CV_32FC1); //訓練陣列
    Mat labels(num_data, 1, CV_32FC1); //標籤

    //五筆訓練資料陣列
    int data[num_data][num_column] = {

        { 100, 50 },
        { 50, 100 },
        { 200, 10 },
        { 20, 40 },
        { 30, 10 }

    };

    //針對以上五筆資料個別的答案,如果 左比右大 標 1 , 否則 標 -1
    int label[num_data] = { 1, -1, 1, -1, 1 };

    //將資料和 label 分別塞入資料結構中
    for (int n = 0; n < num_data; n++){

        for (int c = 0; c < num_column; c++) {

            training_mat.at<float>(n, c) = data[n][c];

        }

    }

    for (int ii = 0; ii < num_data; ii++){

        labels.at<float>(ii) = label[ii];

    }

    //將以上資料結構塞給 SVM Train 做訓練
    CvSVM svm;
    svm.train(training_mat, labels, Mat(), Mat(), params);

    svm.save("svm.sav"); //將訓練好的結果存檔
    svm.load("svm_filename"); //將訓練好的存檔讀回來給 svm 物件


    //設定一筆測試資料看看
    Mat img_mat_1d(1, 2, CV_32FC1);

    img_mat_1d.at<float>(0, 0) = 50;
    img_mat_1d.at<float>(0, 1) = 100;

    //利用 svm 物件
    printf("%f\n ", svm.predict(img_mat_1d)); //因為 50<100 ,所以會輸出 -1

    img_mat_1d.at<float>(0, 0) = 99;
    img_mat_1d.at<float>(0, 1) = 30;
    printf("%f\n ", svm.predict(img_mat_1d)); //因為 99>30 ,所以會輸出 1

    system("pause");
    return 0;
}



若編譯出現錯誤  請參考這篇解決方案

我的Machine Learning_初章_opencv_SVM_範例執行不了問題解決

http://coolmandiary.blogspot.tw/2016/05/machine-learningopencvsvm.html


留言

這個網誌中的熱門文章

經得起原始碼資安弱點掃描的程式設計習慣培養(五)_Missing HSTS Header

經得起原始碼資安弱點掃描的程式設計習慣培養(三)_7.Cross Site Scripting(XSS)_Stored XSS_Reflected XSS All Clients

(2021年度)駕訓學科筆試準備題庫歸納分析_法規是非題