2013-10-24 6 views
2

Я новичок в opencv. Я не получил основных концепций opencv в деталях.Мат, данные тренировки в мл opencv

Так что, может быть, мой код слишком тупой;

Из моего любопытства я хочу попробовать функции машинного обучения, такие как KNN, ANN. У меня есть набор изображений размером 28 * 28 пикселей. Я хочу сделать cassifier для распознавания цифр. Поэтому сначала мне нужно собрать комплекты поездов и поездов;

Mat train_data = Mat(rows, cols, CV_32FC1); 
    Mat train_classes = Mat(rows, 1, CV_32SC1); 
    Mat img = imread(image); 
    Mat float_data(1, cols, CV_32FC1); 
    img.convertTo(float_data, CV_32FC1); 

Как заполнить train_data с помощью float_data? Я думал, что это было чем-л так:

for (int i = 0; i < train_data.rows; ++i) 
{ 
    ... // image is a string which contains next image path 
    image = imread(image); 
    img.convertTo(float_data, CV_32FC1); 
    for(int x = 0; x < train_data.cols; x++){ 
     train_data.at<float> (i, x) = float_data.at<float>(x);; 
    } 
} 

KNearest knn; 
knn.train(train_data, train_classes); 

, но это, конечно, не работает. , , Пожалуйста, скажите, как это сделать правильно. Или, по крайней мере, предложите книги для манекенов :)

ответ

2
Mat train_data; // initially empty 
Mat train_labels; // empty, too. 

// for each img in the train set : 
    Mat img = imread("image_path"); 
    Mat float_data; 
    img.convertTo(float_data, CV_32FC1);    // to float 
    train_data.push_back(float_data.reshape(1,1)); // add 1 row (flattened image) 
    train_labels.push_back(label_for_image);  // add 1 item 

KNearest knn; 
knn.train(train_data, train_labels); 

это все равно для других ml algos!

Смежные вопросы