使用cv :: FlannBasedMatcher和std :: vector堆积腐败

时间:2015-06-11 17:17:33

标签: c++ opencv vector feature-extraction heap-corruption

我正在开发用于物体识别的乳房成像功能,使用FlannBasedMatcher计算空间直方图。

Mat ComputeSpatialHistogram(Mat features, Mat vocabulary, int* region_index, int level, Ptr<DescriptorMatcher> flann_matcher)
{
   int vocab_size = vocabulary.rows;
   Mat descriptor = Mat::zeros(1, vocab_size*my_pow(4, level), CV_32FC1);
   if (features.rows > 0)
   {
        vector<DMatch> matches;
        flann_matcher->match(features, matches);
        int word_idx, region_idx, descr_idx;
        for (int i = 0; i < matches.size(); i++){
            word_idx = matches[i].trainIdx;
            region_idx = region_index[i];
            descr_idx = vocab_size*region_idx + word_idx;
            descriptor.at<float>(0, descr_idx) = descriptor.at<float>(0, descr_idx) + 1.0f;
        }
    }
    return descriptor;
}

结束if(features.rows&gt; 0)范围的执行时出错。你能帮忙吗?

1 个答案:

答案 0 :(得分:1)

尝试放

matches.reserve(size) 

在插入任何元素之前,使用矢量的实际大小。如果你使用的是OpenCV 2.2,那么这是必要的,而不是2.9