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:

  1. 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!).

  2. M'aider à résoudre ce que je vais décrire ci-dessous.

  3. 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!

InformationsquelleAutor widgg | 2012-04-30