Мат, тренировочные данные в мл opencv

Я новичок в opencv. Я не получил основные понятия OpenCV в деталях.

Так что, возможно, мой код слишком тупой;

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

    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);

это все то же самое для других мл алгоритмов!

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]