您的位置:首页 > 编程语言

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

2015-11-02 11:05 447 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: