OpenCV InputArray/OutputArray
Je venais de compiler la dernière version d'OpenCV 2.3. Et leur décision de changer toutes les matrices d'entrée/sortie dans InputArray/OutputArray les dégâts tout en place. Le même bout de code qui fonctionne bien sous OpenCV 2.2 est maintenant inutile.
Il y a deux solutions je accepter:
-
De me montrer où je peux le télécharger OpenCV 2.2 pour Linux, avec tous les modules, il est important que les coutures ne manque pas (j'ai essayé de trouver un convenable, mais la couture est toujours manquant!).
-
M'aider à résoudre ce que je vais décrire ci-dessous.
-
OpenCV 2.4, même si encore une version bêta, a corrigé cela et je devrais passer à cette version à la place!
J'ai ce message d'exception:
OpenCV Error: Assertion failed (k == STD_VECTOR_MAT) in getMat, file /home/widgg/opencv/trunk/modules/core/src/matrix.cpp, line 928
terminate called after throwing an instance of 'cv::Exception'
what(): /home/widgg/opencv/trunk/modules/core/src/matrix.cpp:928: error: (-215) k == STD_VECTOR_MAT in function getMat
Dans gdb, c'est la pile:
#0 0x00007ffff5df3445 in __GI_raise (sig=<optimized out>) at ../nptl/sysdeps/unix/sysv/linux/raise.c:64
#1 0x00007ffff5df6bab in __GI_abort () at abort.c:91
#2 0x00007ffff674169d in __gnu_cxx::__verbose_terminate_handler() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#3 0x00007ffff673f846 in ?? () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#4 0x00007ffff673f873 in std::terminate() () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#5 0x00007ffff673f96e in __cxa_throw () from /usr/lib/x86_64-linux-gnu/libstdc++.so.6
#6 0x00007ffff77fca51 in cv::error(cv::Exception const&) () from /usr/local/lib/libopencv_core.so.2.3
#7 0x00007ffff791306d in cv::_InputArray::getMat(int) const () from /usr/local/lib/libopencv_core.so.2.3
#8 0x00007ffff796064c in cv::perspectiveTransform(cv::_InputArray const&, cv::_OutputArray const&, cv::_InputArray const&) () from /usr/local/lib/libopencv_core.so.2.3
enfin, voici mon code, quand je suis à l'appel de cv::perspectiveTransform:
std::vector<cv::Point2f> corners(4);
cv::Mat cur_image = imread("my_image.jpg");
std::vector<cv::Point2f> img_corners(4);
img_corners[0] = cv::Point2f(0, 0);
img_corners[1] = cv::Point2f(cur_image.cols, 0);
img_corners[2] = cv::Point2f(cur_image.cols, cur_image.rows);
img_corners[3] = cv::Point2f(0, cur_image.rows);
cur_image.release();
cv::perspectiveTransform(img_corners, corners, m_transf);
Et cv::Mat m_transf = (Mat_ < double > (3,3) << 1, 0, 0, 0, 1, 0, 0, 0, 1);, c'est sa valeur lorsqu'il est utilisé en premier, et il se bloque à cet endroit!
J'ai un problème similaire avec cv::FindHomography. Le truc, c'est que le code a exécuter correctement hier et d'aujourd'hui, ce InputArray/OuputArray chose vis tout en haut.
C'est très ennuyeux, s'il vous plaît aider!
Aussi, j'ai trouvé ce rapport ici: OpenCV 2.2 Vs. 2.3 et ce n'est pas un bon signe! Il devrait y avoir une solution de contournement pour ce!
Vous devez vous connecter pour publier un commentaire.
Il semble que vous avez deux versions de OpenCV installé, et l'éditeur de liens essaie d'en utiliser un autre pour la liaison de celui utilisé pour compiler votre code.
La façon la plus simple est de supprimer tous les autres OpenCV versions, et puis un possible mauvais chemin de la bibliothèque sera plus explicite (somelib.donc, disparu)
Ou, vérifiez tous les paramètres de CHEMIN d'accès, l'éditeur de liens drapeaux et inclure des dossiers pour s'assurer que vous utilisez la même version par l'intermédiaire de l'include/compiler/lien étapes