使用OpenCV Vector和MATLAB时遇到问题

Having trouble with OpenCV Vector usage and MATLAB

本文关键字:遇到 问题 MATLAB OpenCV Vector 使用      更新时间:2023-10-16

我正试图在MATLAB中的OpenCV中使用特征检测器。为此,我正在创建一个MEX文件,该文件调用其他CPP文件中的某些其他函数。这些函数实现了调用OpenCV特征检测器的必要例程。在创建MEX文件之前一切都很好。它甚至可以从MATLAB中运行正常的OpenCV例程。但是,当我简单地使用特征检测器时,它会给我一个错误——向量迭代器不兼容。请在下面找到必要的信息-

文件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类型的图像数据结构。Keypoints是一个向量-std::vector Keypoints。描述符也是cv::Mat。

FastFeatureDetector是实现FAST功能检测器的类。BriefDescriptorExtractor是实现Brief的类。

以下是错误的详细信息-

Debug Assertion Failed!
Program: C:Program FilesMATLABR2010bbinwin64MATLAB.exe
File: C:Program Files (x86)Microsoft Visual Studio 10.0VCincludeVector
Line: 238

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

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

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

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

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