训练数据和标签格式出错OpenCV C ++ NDK

时间:2018-01-03 14:30:48

标签: android c++ opencv android-ndk

我正在使用 Android NDK,C ++ OpenCV 来训练一个有2个图像作为训练数据的knn模型和2个标签。

我将数据转换为浮动并展平数据到1行并创建标签,如下面的代码所示。

然而我收到错误:

E/cv::error(): OpenCV Error: Assertion failed (samples.type() == 5 || samples.type() == 4) in void cv::ml::TrainDataImpl::setData(cv::InputArray, int, cv::InputArray,

我无法找到包含此错误的任何其他帖子,因为他们的samples.type()似乎等于不同的值/格式。任何人都可以看到我出错的地方吗?谢谢。

AAssetManager *mgr = AAssetManager_fromJava(env, assetManager);

//Obtain training image 1
AAsset *trainOne = AAssetManager_open(mgr, "train1.jpg", AASSET_MODE_UNKNOWN);
long sizeOfTrainOne = AAsset_getLength(trainOne);
char* bufferTrainOne = (char*)AAsset_getBuffer(trainOne);
std::vector<char> trainOneData(bufferTrainOne, bufferTrainOne + sizeOfTrainOne);
cv::Mat trainOneMat = cv::imdecode(trainOneData, IMREAD_UNCHANGED);

//Obtain training image 2
AAsset *trainTwo = AAssetManager_open(mgr, "train2.jpg", AASSET_MODE_UNKNOWN);
long sizeOfTrainTwo = AAsset_getLength(trainTwo);
char* bufferTrainTwo = (char*)AAsset_getBuffer(trainTwo);
std::vector<char> trainTwoData(bufferTrainTwo, bufferTrainTwo + sizeOfTrainTwo);

cv::Mat trainTwoMat = cv::imdecode(trainTwoData, IMREAD_UNCHANGED);
trainOneMat.convertTo(float_data, CV_32FC1);
trainTwoMat.convertTo(float_data, CV_32FC1);

//Combine into training Mat
train_data.push_back(trainOneMat.reshape(1,1));
train_data.push_back(trainTwoMat.reshape(1,1));

float labelOne = 1;
float labelTwo = 2;

train_label.push_back(labelOne);
train_label.push_back(labelTwo);

knn->train(train_data, ml::ROW_SAMPLE, train_label);

0 个答案:

没有答案