2017-04-17 4 views
2

J'essaie de faire une application iOS qui peut détecter les marqueurs Aruco. Donc, j'ai téléchargé opencv2.framework pour iOS, mais j'ai réalisé qu'Aruco n'est pas inclus dans cela. Suite à ce page, j'ai compilé manuellement en ajoutant le dossier du module opencv_contrib (https://github.com/opencv/opencv_contrib.git) dans le dossier du module opencv. Ce processus a bien fonctionné et dans Xcode je peux accéder aux fonctions d'Aruco. Mais je reçois également cette erreur étrange: functional-style cast xcode error"Fusion de style fonctionnel de id à double n'est pas autorisé" lors de la construction d'opencv avec aruco sur iOS

J'ai essayé le débogage et l'exécution v est passée en tant que variable double. La distribution explicite (double)v n'est pas valide non plus. Comment puis-je réparer cela?

+0

Le type 'id' est un pointeur vers un objet Objective-C (classe); Qu'est-ce que vous essayez d'accomplir en le convertissant en type scalaire 'double'? –

+0

Je pense que _Tp() attend un double type comme argument, mais je ne sais pas pourquoi le param est déclaré comme générique T2 – keyblade95

+0

Je ne sais rien sur les génériques en C++, mais oui, il y a une incompatibilité de type entre 'id' et 'double '(ou du moins c'est ce que Xcode pense) ... peut-être une erreur sur le côté du code qui utilise ce template? Wild devinez ... Ce n'est pas votre code de toute façon, non? –

Répondre

0

J'ai trouvé le problème. C'était un autre morceau de code qui appelait l'opérateur, sans lancer explicitement les params. Il était:

NSArray *camMatrix = ... 
... 
Mat cameraMatrix = (Mat_<double>(3,3) << camMatrix[0], camMatrix[1], camMatrix[2], 
       camMatrix[3], camMatrix[4], camMatrix[5], 
       camMatrix[6], camMatrix[7], camMatrix[8]); 

Juste casted [camMatrix [0] doubleValue] comme ceci:

NSArray *camMatrix = ... 
... 
Mat cameraMatrix = (Mat_<double>(3,3) << [camMatrix[0] doubleValue], [camMatrix[1] doubleValue], [camMatrix[2] doubleValue], 
       [camMatrix[3] doubleValue], [camMatrix[4] doubleValue], [camMatrix[5] doubleValue], 
       [camMatrix[6] doubleValue], [camMatrix[7] doubleValue], [camMatrix[8] doubleValue]);