2016-06-22 2 views
0

OpenCV 3.1でandroid用の短い記述子を使用しようとしています。 OpenCVは_contribを使ってソースからビルドする必要があります。だから私はエラーなしでそれをコンパイルし、BRIEF.cpp.o beeingがコマンドウィンドウでビルドされているのを見ることもできます。新しいビルドでヘッダーの変更が有効にならない

だから私はそれを使用しようとすると、

OpenCV Error: Bad argument (Specified descriptor extractor type is not supported.) in static cv::javaDescriptorExtractor* cv::javaDescriptorExtractor::create(int), file /home/maksim/workspace/android-pack/opencv/modules/features2d/misc/java/src/cpp/features2d_manual.hpp, line 374

を投げ、私のAndroidアプリがクラッシュしたので、私はfeatures2d_manual.hppをチェックします。ライン374は、スイッチケースブロックのデフォルトの式である:ケースBRIEFがコメントされているので

CV_WRAP static javaDescriptorExtractor* create(int extractorType) 
{ 
    //String name; 

    if (extractorType > OPPONENTEXTRACTOR) 
    { 
     //name = "Opponent"; 
     extractorType -= OPPONENTEXTRACTOR; 
    } 

    Ptr<DescriptorExtractor> de; 
    switch(extractorType) 
    { 
    //case SIFT: 
    // name = name + "SIFT"; 
    // break; 
    //case SURF: 
    // name = name + "SURF"; 
    // break; 
    case ORB: 
     de = ORB::create(); 
     break; 
    //case BRIEF: 
    // name = name + "BRIEF"; 
    // break; 
    case BRISK: 
     de = BRISK::create(); 
     break; 
    //case FREAK: 
    // name = name + "FREAK"; 
    // break; 
    case AKAZE: 
     de = AKAZE::create(); 
     break; 
    default: //**this is line 374** 
     CV_Error(Error::StsBadArg, "Specified descriptor extractor type is not supported."); 
     break; 
    } 

    return new javaDescriptorExtractor(de); 

ので誤差は明らかにアップします。だから私はそのように修正した:

#include "opencv2/xfeatures2d.hpp" 

。 。

case BRIEF: 
    de = xfeatures2d::BriefDescriptorExtractor::create(); 
    break; 

。 。 。

default: 
      CV_Error(Error::StsBadArg, "---TEST--- Specified descriptor extractor type is not supported."); 
      break; 
     } 

新鮮なディレクトリにrebuilingと新しいビルドを使用した後、まったく同じエラーが永続的です。メッセージには "--- TEST ---"という文字列も含まれていません。

私の変更が何の効果をもたらさないのか不思議です。

/home/maksim/workspace/android-pack/opencv/modules/features2d/misc/java/src/cpp/features2d_manual.hpp

/ホーム/マクシムは/別のエラーの多くの一部であることを、このdirctoryも私のシステム上に存在しない、それが示したグーグル:ファイルパスがある理由

また、私は疑問に思ってアンドロイドのメッセージ建物の前に

実際のパスは次のとおりです。

C:\Users\JJG-CD\Desktop\Build_Workspace\opencv-3.1.0\modules\features2d\misc\java\src\cpp\features2d_manual.hpp

私は誰かが問題が何であるかを私に説明し、最終的に私にそれを解決する方法のヒントを与えることができることを望みます。

答えて

0

私はすでに断念しましたが、解決策を見つけました。私自身のビルドされたライブラリが使用されていない理由は、それらのライブラリが通常opencvマネージャーのアプリケーションによって提供されているという事実でした。OpenCVマネージャを取り除き、自分のライブラリを使うためには、OpenCVを静的に初期化する必要がありました。

static { 
if (!OpenCVLoader.initDebug()) { 
    // Handle initialization error} 
} 

更なる詳細は、Smeeheeyに答えるためhere

0

あなたが見ているエラーは、同じヘッダーファイルを使用するリンク先のライブラリからのものです。ヘッダーを変更したコードを再コンパイルすると、ヘッダーの変更は実際にコンパイルしているコードに対してのみ有効で、リンクしているライブラリで既にコンパイルされているコードには反映されません。

あなたのコンパイルラインを見て、すべての-lオプションを可能な疑いのあるものとみなしてください。

存在しないディレクトリ参照についても説明します。このディレクトリは存在し、ライブラリがコンパイルされたマシン上でコンパイルされた時点で使用されました。

ヘッダーの変更をライブラリコードで有効にするには、ライブラリ自体を再コンパイルする必要があります。あなたのプロジェクト構成ファイルを見てください:これを行うには、すでにmakeまたはcmakeのオプションがあります。

+0

感謝を見つけることができます。私はあなたに1upを与えたいが、私は十分な評判を持っていない(多分誰かが私のためにそれを行うことができる)。あなたのコメントは私の問題を明らかにした。私はwin7とcmake-guiでコンパイルしていますが、それでも解決できるオプションが見つかった可能性があります。いくつかのオプションを除いて、私はちょうど私がデフォルト設定(ENABLE_PRECOMPILED_HEADERS = trueのうちの1つ)でコンパイルしていたことがわかっていました。だから、私はそれを偽に設定し、もう一度試してみましょう。私はすぐに私は結果を得たとして更新されます。 –

+0

ENABLE_PRECOMPILED_HEADERS = falseは助けにはなりませんでした。それ以外に何を変えるべきか分かりません。 1年前に既に報告されているバグのようです:[link](https://github.com/Itseez/opencv/issues/5030)。初心者のプログラマーにとって、私はこれをあきらめなければならないと思います。 –

+0

あなたは正確なコンパイルラインを共有してみませんか?私のビルドディレクトリにsvedそれらの全体の束があるとして、あなたが作るか、cmakeの使用している場合は、私は全くわからないんだけど、関連するメイクファイル – Smeeheey

関連する問題