Mat.at 函数抛出异常

Posted

技术标签:

【中文标题】Mat.at 函数抛出异常【英文标题】:Mat.at function throwing exception 【发布时间】:2014-11-10 07:39:37 【问题描述】:

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

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

当我尝试运行此代码时,它会在 siftFeatureDescriptor.at 函数处引发异常。

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

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

请帮忙。

【问题讨论】:

如果 mat.type 是 32FC1 你应该使用 at 访问它 将所有使用的变量改为浮动解决了这个问题。谢谢。 我在最终答案中添加了这一点。您可以验证答案,以便其他人知道您的问题已解决... 【参考方案1】:

如果 mat.type 是 32FC1,您肯定应该使用 at&lt;float&gt; 访问它。

此外,我猜您可能混淆了“检测器”和“提取器”。通常你应该像这样使用它们:

// 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

【讨论】:

以上是关于Mat.at 函数抛出异常的主要内容,如果未能解决你的问题,请参考以下文章

JAVA如何抛出异常

构造函数析构函数抛出异常的问题

C++的构造函数可以抛出异常么

Python哈希函数啥情况下抛出异常

关于java异常抛出与返回值

Azure 函数应该记录错误还是抛出异常?