2

MATLABのOpenCVで機能検出器を使用しようとしています。そのために、他のCPPファイル内の他の特定の関数を呼び出すMEXファイルを作成しています。これらの関数は、OpenCV機能検出器を呼び出すために必要なルーチンを実装します。MEXファイルを作成するまではすべて順調です。MATLABから通常のOpenCVルーチンを実行することもできます。しかし、単に機能検出器を使用していると、エラーが発生します-VECTORITERATORSINCOMPATIBLE。以下の必要な情報を見つけてください-

ファイル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ビットです。私はMATLABR2010bとVC2010UltimateEditionを実行しています。すべてのコードとdllは64ビットです。VCコンソールから実行した場合、プログラムはエラーをスローしません。ただし、MATLABから実行するとエラーが発生します。

私の質問:OpenCVの機能検出プログラムのいずれかでこの種の問題に直面した人はいますか?はいの場合は、親切にこれを手伝ってください。

4

2 に答える 2

0

どうでも。私は解決策を見つけました。デフォルトでは、MEXコンパイラのmexopts.batのSECURE_SCLは0です。そのままにしている。OpenCVリリースコードを取得します(またはSECURE_SCL = 0を使用してデバッグを再コンパイルします)。私は実際にこれに関連する投稿を調べました。しかし、それらのほとんどは、エラーを抑制しないフラグ=1を設定するように指示します。

于 2012-11-23T15:59:55.933 に答える
0

Computer Vision System Toolboxには、 OpenCVとのインターフェイス用のサポートパッケージが含まれるようになりました。

于 2014-11-26T15:21:55.003 に答える