垫子,在 ml opencv 中训练数据

Mat, training data in ml opencv

本文关键字:数据 opencv ml 垫子      更新时间:2023-10-16

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

如何用float_data填充train_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);

但这当然是行不通的。 。 。请告诉我如何做对。或者至少建议傻瓜书:)

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 算法来说都是一样的!