我正在使用OpenCV kmeans算法来计算某种直方图。
在第一阶段,我将从火车数据中提取一些特征,并将其放入cv :: kmeans函数参数之一。
cv :: kmeans的输出给了我两个不同的输出。
在下一阶段中,我想为测试数据计算标签,但使用在上一阶段中计算出的一些数据,但是如果我设置KMEANS_USE_INITIAL_LABELS标志并传递在上一阶段中计算出的标签,则会产生带有消息的异常: / p>
错误:(-215:断言失败)(unsigned)_labels.at(i)<('keans'函数中的K(无符号)K
这是我的cv :: kmeans包装方法
void Kmeans::fit_predict(cv::InputArray in, cv::InputOutputArray out)
{
// in is and input, my sample/s descriptors
// out -> computed labels; in first stage this array is empty
int flag = cv::KMEANS_PP_CENTERS;
if (!out.empty()) {
flag = cv::KMEANS_USE_INITIAL_LABELS;
cv::Mat m;
out.copyTo(m);
std::cout << m; // M has appropriate values, each value is < K(clusters amount)
}
cv::kmeans(in, _clusters_count, out, _term_criteria, _attempts, flag, _centers);
}
我如何调用kmeans方法(这是我的Kmeans类的一部分)
auto kmeans = std::make_unique<Kmeans>();
cv::Mat my_train_data .......initializing etc...
cv::Mat labels;
std::vector<Sample> test_samples ........initializng etc....
kmeans->fit_predict(my_train_data, labels);
for (auto& s : test_samples) {
cv::Mat test_labels = labels.clone();
kmeans->fit_predict(s->getDescriptors(), test_labels);
/// Process outputs etc...
}
以下是我正在调用cv :: kmeans的参数
in->上面定义的
_clusters_count->这是我的课程的属性,它是100
输出->上面定义的
_term_criteria->作为我的课程的属性存储,它具有以下值: cv :: TermCriteria(cv :: TermCriteria :: MAX_ITER + cv :: TermCriteria :: EPS,300,0.0001)
flag-> _attempts->属性,它是20
_centers->属性,它具有默认值:cv :: noArray()
为什么会出现此错误?