我正在尝试在 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 中的任何特征检测器程序中遇到过这种问题吗?如果是,请帮助我。