• opencv 数据训练


    #include <io.h>
    #include <string>
    #include <iostream>
    #include <opencv2opencv.hpp>
    #include <opencv2ml.hpp>
    using namespace cv;
    using namespace ml;
    int main()
    {
        //=========读取图片创建训练数据======//
        //将所有图片大小统一转化为8*16
        const int imageRows = 8;
        const int imageCols = 16;
        //图片共有10类
        const int classSum = 10;
        //每类共50张图片
        const int imagesSum = 50;
        //每一行一个训练图片
        float trainingData[classSum*imagesSum][imageRows*imageCols] = { {0} };
        //训练样本标签
        float labels[classSum*imagesSum][classSum] = { {0} };
        Mat src, resizeImg, trainImg;
        for (int i = 0; i < classSum; i++)
        {
            //目标文件夹路径
            std::string inPath = "E:\学习资料\阿拉伯数字\";
            char temp[256];
            int k = 0;
            sprintf_s(temp, "%d", i);
            inPath = inPath + temp + "\*.png";
            //用于查找的句柄
    
            long handle;
            struct _finddata_t fileinfo;
            //第一次查找
            handle = _findfirst(inPath.c_str(), &fileinfo);
            if (handle == -1)
                return -1;
            do
            {
                //找到的文件的文件名
                std::string imgname = "E:/学习资料/阿拉伯数字/";
                imgname = imgname + temp + "/" + fileinfo.name;
                src = imread(imgname, 0);
                if (src.empty())
                {
                    std::cout << "can not load image 
    " << std::endl;
                    return -1;
                }
                //将所有图片大小统一转化为8*16
                resize(src, resizeImg, Size(imageRows, imageCols), (0, 0), (0, 0), INTER_AREA);
                threshold(resizeImg, trainImg, 0, 255, THRESH_OTSU);
                for (int j = 0; j < imageRows*imageCols; j++)
                {
                    trainingData[i*imagesSum + k][j] = (float)trainImg.data[j];
                }
                // 设置标签数据
                for (int j = 0; j < classSum; j++)
                {
                    if (j == i)
                        labels[i*imagesSum + k][j] = 1;
                    else
                        labels[i*imagesSum + k][j] = 0;
                }
                k++;
    
            } while (_findfirst(inPath.c_str(), &fileinfo) && k <imagesSum);
            Mat labelsMat(classSum*imagesSum, classSum, CV_32FC1, labels);
        }
        //训练样本数据及对应标签
        Mat trainingDataMat(classSum*imagesSum, imageRows*imageCols, CV_32FC1, trainingData);
        Mat labelsMat(classSum*imagesSum, classSum, CV_32FC1, labels);
        //std::cout<<"trainingDataMat: 
    "<<trainingDataMat<<"
    "<<std::endl;
        //std::cout<<"labelsMat: 
    "<<labelsMat<<"
    "<<std::endl;
        //==========================训练部分==============================//
        Ptr<ANN_MLP>model = ANN_MLP::create();
        Mat layerSizes = (Mat_<int>(1, 5) << imageRows * imageCols, 128, 128, 128, classSum);
        model->setLayerSizes(layerSizes);
        model->setTrainMethod(ANN_MLP::BACKPROP, 0.001, 0.1);
        model->setActivationFunction(ANN_MLP::SIGMOID_SYM, 1.0, 1.0);
        model->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER | TermCriteria::EPS, 10000, 0.0001));
    
        Ptr<TrainData> trainData = TrainData::create(trainingDataMat, ROW_SAMPLE, labelsMat);
        std::cout << "训练中请稍后..." << std::endl;
        model->train(trainData);
        std::cout << "训练结束,保存结果中..." << std::endl;
        //保存训练结果
        model->save("E:/学习资料/阿拉伯数字/1/MLPModel.xml");
    return 0;
    }
  • 相关阅读:
    pandas 修改指定列中所有内容
    Python 实现获取【昨天】【今天】【明天】日期
    Selenium定位不到指定元素原因之iframe(unable to locate element)
    Pandas 通过追加方式合并多个csv
    python setup.py install 报错:error: [WinError 3] 系统找不到指定的路径。: 'C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\PlatformSDK\lib
    pandas 如何判断指定列是否(全部)为NaN(空值)
    报错:PermissionError: [WinError 5] Access is denied: 'C:\Program Files\Anaconda3\Lib\site-packages\pywebhdfs'
    Node.js的函数返回值
    在Eclipse中使用JSHint检查JavaScript
    Node.js前端自动化工具:gulp
  • 原文地址:https://www.cnblogs.com/hsy1941/p/11495500.html
Copyright © 2020-2023  润新知