时间序列识别代码调试版本1

#include <iostream>
//#include <stdio.h>
#include <fstream>
#include <iomanip>
#include <opencv2/core/core.hpp>
#include <opencv2/highgui/highgui.hpp>
//#include <opencv2/ml/ml.hpp>
//#include <opencv2/features2d/features2d.hpp>
//#include <opencv2/objdetect.hpp>

//#include <opencv2/gpu/gpu.hpp>


#include <opencv2/imgproc/imgproc.hpp>
#include <opencv2/objdetect/objdetect.hpp>
#include <opencv2/xobjdetect/xobjdetect.hpp>

using namespace std;
using namespace cv;


//FeatureEvaluator
int main()
{
    /************************************************************************************
    参数设置
    *************************************************************************************/
    //some parameters:
    int positive_num = 1000;
    int negative_num = 9000;

    vector<String> v_positive_img;
    vector<String> v_negative_img;

    //先考虑训练0
    int test_char = 0;
    //正例、负例
    string all_class_path = "C:\Users\cong\Desktop\研一实战\项目\图像中时间数字识别\OCR\result\";
    string img_txt;



    for (int i = 0; i < 10; i++)
    {
        //数字转字符
        stringstream ss;
        ss << i;
        string test_char_str = ss.str();

        img_txt = all_class_path + "result" + test_char_str + ".txt";
        string path;
        ifstream finPos(img_txt);

        if (test_char == i)
        {
            //vector<Mat> channels;                //用来装一幅图的N个通道;还没初始化

            getline(finPos, path);                 //应该把文件中的图片个数也记录下来,由于该次的数据集,0~9个数一样,因此,可以考虑先不这么做
            int img_num = 0;                     //把path,第一行字符变成数字,还没有完成

            for (int j = 0; j<positive_num && getline(finPos, path); j++)
            {
                v_positive_img.push_back(path);
                //cout << path<<endl;
            }

        }
        else
        {
            //vector<Mat> channels;                //用来装一幅图的N个通道;还没初始化

            getline(finPos, path);                 //应该把文件中的图片个数也记录下来,由于该次的数据集,0~9个数一样,因此,可以考虑先不这么做
            int img_num = 0;                     //把path,第一行字符变成数字,还没有完成

            for (int j = 0; j<negative_num && getline(finPos, path); j++)
            {
                v_negative_img.push_back(path);
                //cout << path << endl;
            }
        }
    }


    //训练:随机森林
    //上述中正负样本的个数是否需要调整?
    cv::xobjdetect::ICFDetectorParams myICFDetctorParams;
    cv::xobjdetect::ICFDetector myICFDetector;
    myICFDetector.train(v_positive_img, v_negative_img, myICFDetctorParams);

    //测试,尺度问题呢?
    //parameters

    //Mat img_test = imread("C:\Users\cong\Desktop\研一实战\项目\图像中时间数字识别\OCR\one\3.jpg");
    //vector<Rect> myRect;
    //float scaleFactor;
    //Size minSize;
    //Size maxSize;
    //float threshold;
    //int slidingStep;
    //vector<float> values;

    //myICFDetector.detect(img_test, myRect, scaleFactor, 10, 50, threshold, slidingStep, values);

    /*
    C++: void ICFDetector::detect(const Mat& image, vector<Rect>& objects, float scaleFactor, Size minSize, Size maxSize, float threshold, int slidingStep, std::vector<float>& values)
    C++: detect(const Mat& img, std::vector<Rect>& objects, float minScaleFactor, float maxScaleFactor, float factorStep, float threshold, int slidingStep, std::vector<float>& values)
    Parameters:    
    image – image for detection
    objects – output array of bounding boxes
    scaleFactor – scale between layers in detection pyramid
    minSize – min size of objects in pixels
    maxSize – max size of objects in pixels
    minScaleFactor – min factor by which the image will be resized
    maxScaleFactor – max factor by which the image will be resized
    factorStep – scaling factor is incremented each pyramid layer according to this parameter
    slidingStep – sliding window step
    values – output vector with values of positive samples
    */

    return 0;
}
原文地址:https://www.cnblogs.com/Wanggcong/p/4929595.html