我正在尝试在MATLAB中使用OpenCV中的特征检测器。为此,我正在创建一个MEX文件,该文件调用其他CPP文件中的某些其他功能。这些函数实现了调用OpenCV特征检测器所需的例程。 在创建MEX文件之前,一切都很顺利。它甚至可以从MATLAB运行正常的OpenCV例程。 但是,当我只是使用功能检测器时,它给了我一个错误 - 矢量ITERATORS不兼容。 请在下面找到必要的信息 -
文件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类型的图像数据结构。关键点是vector-std :: vector Keypoints。描述符也是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中的任何特征检测器程序是否有人遇到过此类问题?如果是的话,请帮助我。
答案 0 :(得分:0)
没关系。我找到了解决方案。默认情况下,MEX编译器在mexopts.bat中将SECURE_SCL设置为0。保持这种方式。获取OpenCV版本代码(或使用SECURE_SCL = 0重新编译调试)。我实际上经历了与此相关的帖子。但是,他们中的大多数都告诉你设置flag = 1,这不会抑制错误。
答案 1 :(得分:0)
计算机视觉系统工具箱现在包含interfacing with OpenCV的支持包。