使用初始标签会导致OpenCV kmeans出现异常

时间:2018-11-10 22:05:04

标签: c++ opencv machine-learning

我正在使用OpenCV kmeans算法来计算某种直方图。

在第一阶段,我将从火车数据中提取一些特征,并将其放入cv :: 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()

为什么会出现此错误?

0 个答案:

没有答案