Mat,ml opencv中的训练数据

Posted

技术标签:

【中文标题】Mat,ml opencv中的训练数据【英文标题】:Mat, training data in ml opencv 【发布时间】:2013-10-24 16:10:40 【问题描述】:

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

如何用 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);

但这当然行不通。 . . 请告诉我如何正确地做。或者至少为傻瓜推荐书籍:)

【问题讨论】:

【参考方案1】:
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);

其他毫升算法都一样!

【讨论】:

以上是关于Mat,ml opencv中的训练数据的主要内容,如果未能解决你的问题,请参考以下文章

OpenCVopencv3.0中的SVM训练 mnist 手写字体识别

SVM 训练 C++ OpenCV

在 OpenCV 上使用 SVM 训练图像

训练 SVM 时出现 OpenCV 错误(错误参数)

Opencv中数据结构Mat的相关属性

opencv再学习:视频的读取和滚动条的添加