我是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);
但它当然不起作用。 。 。 请告诉我如何正确行事。或者至少建议傻瓜的书籍:)
答案 0 :(得分: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都是一样的!