我正在使用 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);