2

我正在尝试在 MATLAB 的 OpenCV 中使用特征检测器。为此,我正在创建一个 MEX 文件,该文件调用其他 CPP 文件中的某些其他函数。这些函数实现了调用 OpenCV 特征检测器的必要例程。一切都很好,直到创建 MEX 文件。它甚至可以从 MATLAB 运行普通的 OpenCV 例程。但是,当我简单地使用特征检测器时,它给了我一个错误 - VECTOR ITERATORS INCOMPATIBLE。请在下面找到必要的信息 -

文件 1 - FeatureDetectorMEX.cpp -> 此文件包含从 FeatureDetetor.cpp 调用特征检测器的 MEX 函数 文件 2 - FeatureDetector.cpp -> 此文件包含 FAST 特征检测器。然后它调用特征提取器BRIEF来获取关键点的一些特征描述符。这是代码 -

Keypoints sourceKp;
Descriptors sourceDesc;
cv::FastFeatureDetector *detector = new cv::FastFeatureDetector(50);
cv::BriefDescriptorExtractor *extractor = new cv::BriefDescriptorExtractor();
//The following line generates the error
detector->detect(img.clone(),sourceKp);
if(!sourceKp.empty())
{
extractor->compute(img.clone(),sourceKp,sourceDesc);
}

这里,img 是 cv::Mat 类型的图像数据结构。关键点是一个向量 - std::vector 关键点。描述符也是 cv::Mat。

FastFeatureDetector 是实现 FAST 特征检测器的类。BriefDescriptorExtractor 是实现Brief 的类。

这是错误的详细信息-

Debug Assertion Failed!

Program: C:\Program Files\MATLAB\R2010b\bin\win64\MATLAB.exe
File: C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\Vector
Line: 238

表达式:向量迭代器不兼容

这里有更多信息: 我的系统是 64 位的。我正在运行 MATLAB R2010b 和 VC 2010 终极版。所有代码和 dll 都是 64 位的。如果从 VC 控制台运行,该程序不会抛出任何错误。但是,如果从 MATLAB 运行,则会引发错误。

我的问题:有人在 OpenCV 中的任何特征检测器程序中遇到过这种问题吗?如果是,请帮助我。

4

2 回答 2

0

计算机视觉系统工具箱现在包括一个与 OpenCV 接口的支持包。

于 2014-11-26T15:21:55.003 回答
0

没关系。我找到了解决方案。默认情况下,MEX 编译器在 mexopts.bat 中将 SECURE_SCL 设为 0。保持这种方式。获取 OpenCV 发布代码(或使用 SECURE_SCL = 0 重新编译调试)。我实际上浏览了与此相关的帖子。但是,他们中的大多数会告诉您设置标志 = 1,这不会抑制错误。

于 2012-11-23T15:59:55.933 回答