注: どうやら StackOverflow に関する繰り返しの質問ですが、私が見た限りでは、人々が方法を見つけられないか、解決策がうまくいかないかのどちらかです。
問題:
Eclipse Juno ADT を使用しています。NDK を更新しようとするまで、すべてが正常に機能していました。ndk
フォルダー (つまり ) をndk-r8d
新しいバージョン (つまりndk-r8e
)に置き換え、Paths and Symbols
構成でインクルードを g++ 4.6 から 4.7 に変更しました。
インデックスが壊れているように見えました。コードをコンパイルできましたが、[ 1 ] や [ 2 ] とまったく同じように、Eclipse がセマンティック エラーを出していました。エラーは主distance
に、pt
、、 などの OpenCV4Android で使用される記号から発生queryIdx
しtrainIdx
ます。
古い構成にバックアップしようとすると、インデックスがまだ壊れていました! これを変更する方法が見つかりません。
私が試したこと
- プロジェクトをクリーンアップする
- 「インデックス」サブメニューの再構築、更新、およびその他すべてのオプション (プロジェクトを「右クリック」した場合)
- 環境設定でインデクサーを無効/有効にする
trainIdx
OpenCV4Android にのみ表示されるなどの記号がPaths and Symbols
セクションに含まれていることを確認します。- セクション内のインクルードの順序を変更し
Paths and Symbols
ます。私は基本的にOpenCVのインクルードを最初と最後に入れようとしました。
いくつかの観察
機能していないもの
次の理由から、 CDT インデックスであると思います。
ndk-build clean
コマンド ラインでは、 と を使用してプロジェクトをビルドできndk-build
ます。jni
Eclipse を起動すると、(フォルダーから) C++ ファイルを開くまでエラーは発生しません。- プロジェクトはいつでもビルドできますが、C++ ファイルを開いている限り、多くの理由でアプリケーションを実行できません。
Field '<name>' could not be resolved.
- C++ ファイルを開かない場合、Eclipse はエラーを報告せず、Android アプリケーションを正常にビルドおよびデプロイできます。
興味深い事実
line
次のコードは、、、queryIdx
でエラーを報告しますpt
:
cv::line(mRgb, keypointsA[matches[i].queryIdx].pt, keypointsB[matches[i].trainIdx].pt, cv::Scalar(255, 0, 0, 255), 1, 8, 0);
次のように書くと、うまくいきます。
cv::DMatch tmpMatch = matches[i];
cv::KeyPoint queryKp = keypointsA[tmpMatch.queryIdx];
cv::KeyPoint trainKp = keypointsB[tmpMatch.trainIdx];
cv::line(mRgb, queryKp.pt, trainKp.pt, cv::Scalar(255, 0, 0, 255), 1, 8, 0);
すべての OpenCV 関数が未解決というわけではありpt
ませqueryIdx
んtrainIdx
。
どんなコメントでも本当に感謝します。