Mat.at函数抛出异常

时间:2014-11-10 07:39:38

标签: c++ opencv

在我的代码中,我想访问Mat类型矩阵的每个元素。获得矩阵作为SIFT算法的输出。

SiftFeatureDetector detector; detector.compute(image, keypoints, siftFeatureDescriptor); cout<<siftFeatureDescriptor.at<double>(0,0);

当我尝试运行此代码时,它会在siftFeatureDescriptor.at函数中抛出异常。

当我尝试将double更改为int时,异常消失但显示错误的值1114898432,而实际值为49.

使用Mat.type我发现矩阵的类型是32FC1。

请帮忙。

1 个答案:

答案 0 :(得分:2)

如果mat.type是32FC1,你肯定应该使用at<float>来访问它。

此外,我猜你可能会混淆#34;探测器&#34;和&#34;提取器&#34;。通常你应该像这样使用它们:

// initialize detector and extractor
  FeatureDetector* detector = new SiftFeatureDetector(
                                     0, // nFeatures
                                     4, // nOctaveLayers
                                     0.04, // contrastThreshold
                                     10, //edgeThreshold
                                     1.6 //sigma
                                     );
  DescriptorExtractor* extractor = new SiftDescriptorExtractor();

  // detect the keypoints
  vector<KeyPoint> keypoints;
  detector->detect(img, keypoints);

  // now compute the descriptors for each keypoint
  Mat descriptors;
  extractor->compute(img, keypoints, descriptors);

我将代码基于this example