• 大小: 1KB
    文件类型: .gz
    金币: 1
    下载: 0 次
    发布日期: 2021-06-05
  • 语言: 其他
  • 标签: 机器学习  

资源简介

利用KNN识别LED数码管,识别率大概99左右,需要的可以看下。

资源截图

代码片段和文件信息

#include 
#include 
#include 
#include 
#include 
using namespace cv;
using namespace std;
int main()
{
    double t;
    t=(double)cvGetTickCount();
    const int k = 5;
    cv::Ptr knn = ml::KNearest::create();
    knn->setDefaultK(k);
    knn->setIsClassifier(true);     //分类问题
    knn->setAlgorithmType(ml::KNearest::BRUTE_FORCE);   //设置/获取KNN算法类型,目前支持两种:brute_force和KDTree;
    Mat datalabel;
    string readName = “/home/tianjiazhao/图片/LED_Number/“;
    for(int i = 1; i < 10; i++)
    {
        string readName_ = readName + to_string(i);
        for(int j = 1; j <51; j++)
        {
            Mat gray;
            gray = imread(readName_ +“/“+ to_string(j) + “.jpg“0);
            threshold(gray gray 200 255 CV_THRESH_BINARY);
//            imshow(““gray);
//            waitKey(0);
            Mat tmp;
            resize(graytmpSize(88));
            imshow(““tmp);
            data.push_back(tmp.reshape(01));
            label.push_back(i);
        }
    }

    data.convertTo(dataCV_32F);    //char转化为cv_32F

    knn->train(dataml::ROW_SAMPLElabel);
    knn->save(“LED2.xml“);
    //predict
    float train_hr = 0;
//    Mat predoct_img =imread(“/home/tianjiazhao/opencv/RuneDetector/“
//                            “build-RunDetector-Desktop_Qt_5_9_0_GCC_64bit-Debug/160.jpg“0);
//    resize(predoct_imgpredoct_imgSize(1010));
//    imshow(“preditc“predoct_img);
//    Mat sample;
//    sample.push_back(predoct_img.reshape(01));
//    cout<//    sample.convertTo(sampleCV_32F);
//    float r = knn->predict(sample);
//    cout<<“r“<    for(int i = 0; i < data.rows; i++)
    {
        Mat sample = data.row(i);
//        cout<        float r = knn->predict(sample);
        r = std::abs(r - label.at(i))<= FLT_EPSILON ? 1.f : 0.f;
//        cout<<“r“<        train_hr += r;
    }
    train_hr /= data.rows;
    cout<//    waitKey(0);
    t=(double)cvGetTickCount()-t;
    printf(“used time is %gms\n“(t/(cvGetTickFrequency()*1000)));
}

评论

共有 条评论