NOTE: apparemment, il est une question récurrente sur StackOverflow, mais pour ce que j'ai vu - soit les gens de ne jamais trouver un moyen ou leur solution ne fonctionne pas pour moi
Le problème:
Je suis à l'aide d'Eclipse Juno ADT. Tout fonctionnait bien jusqu'à ce que j'ai essayé de mettre à jour le NDK. J'ai remplacé mon ndk
le dossier (qui est l' ndk-r8d
) par la nouvelle version (c'est à dire ndk-r8e
) et, dans ma Paths and Symbols
configuration, j'ai changé le comprend pour passer de g++ 4.6 à 4.7.
Il semblait rompre mon indice: j'ai pu compiler mon code, mais Eclipse a été de donner les erreurs de sémantique, exactement comme dans [1] et [2]. Les erreurs principalement venir de symbole utilisé par OpenCV4Android, comme distance
, pt
, queryIdx
et trainIdx
.
Quand j'ai essayé de sauvegarde de mon ancienne configuration, l'indice était toujours en panne! Je ne peux pas trouver un moyen de changer cela.
Ce que j'ai essayé
- Nettoyer le projet
- Reconstruire, d'actualiser et de toutes les autres options dans la "Index" sous-menu (lorsque "clic droit" sur le projet)
- Activer / désactiver l'indexation dans les préférences
- Vérifier que les symboles tels que l'
trainIdx
n'apparaissent que dans mon OpenCV4Android inclure dans l'Paths and Symbols
section. - Changer l'ordre de mes inclut dans l'
Paths and Symbols
section. En gros, j'ai essayé de mettre la OpenCV inclure au début et à la fin.
Quelques observations
Ce n'est pas de travail
Je suppose que c'est le CDT de l'indice pour les raisons suivantes:
- En ligne de commande, je peux construire mon projet à l'aide d'
ndk-build clean
etndk-build
. - Quand j'ai commencer à Eclipse, je n'ai pas d'erreur jusqu'à ce que j'ouvre un fichier C++ (à partir de l'
jni
le dossier). - Je peux toujours construire le projet, mais aussi longtemps que j'ai ouvert un fichier C++, je ne peux pas exécuter l'application plus à cause de beaucoup d'
Field '<name>' could not be resolved.
- Si je ne l'ouvrez pas les fichiers C++, Eclipse n'est pas signaler toute erreur et que vous pouvez créer et déployer l'application Android avec succès.
Fait intéressant
Le code suivant signale les erreurs sur 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);
Si je l'écris comme suit, ça fonctionne:
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);
Ce n'est pas que tous les OpenCV fonctions ne sont pas résolues: seulement pt
, queryIdx
et trainIdx
sont.
Tout commentaire sera vraiment appréciée.