2012-04-30 7 views
6

Ho appena compilato l'ultima versione di OpenCV 2.3. E la loro decisione di cambiare tutti gli input/output Matrix in InputArray/OutputArray danneggia tutto. Lo stesso pezzo di codice che stava funzionando bene con OpenCV 2.2 ora è senza valore.OpenCV InputArray/OutputArray

Ci sono due soluzioni avrei accettato:

  1. mostrandomi dove posso scaricare OpenCV 2.2 per Linux, con tutti i moduli, è importante che la cucitura non manca (ho cercato di trovare uno adatto, ma manca sempre la cucitura!).

  2. Aiutami a risolvere ciò che sto descrivendo di seguito.

  3. OpenCV 2.4, anche se ancora beta, ha risolto questo problema e dovrei passare a questa versione!

ho questo messaggio di eccezione:

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 

In gdb, questo è lo stack:

#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 

Infine, ecco il mio codice quando sto chiamando 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); 

E cv :: Mat m_transf = (Mat_ < double> (3,3) < < 1, 0, 0, 0, 1, 0, 0, 0, 1) ;, questo è il suo valore quando viene usato per la prima volta e si blocca in quel punto!

Ho un problema simile con cv :: FindHomography. La cosa è che il codice era in esecuzione correttamente ieri e ora, questa cosa InputArray/OuputArray avvita tutto.

È molto fastidioso, per favore aiuto!

Inoltre, ho trovato questo rapporto qui: OpenCV 2.2 Vs. 2.3 e non è un buon segno! Ci dovrebbe essere una soluzione per questo!

risposta

7

Sembra che siano installate due versioni di OpenCV e il linker tenta di utilizzare un collegamento diverso da quello utilizzato per compilare il codice.

Il modo più semplice è quello di rimuovere tutte le altre versioni OpenCV, e quindi un possibile percorso di libreria sbagliato sarà più esplicito (somelib.so mancante)

Oppure, controllare tutte le impostazioni di PATH, bandiere linker e includono le cartelle per assicurarti di utilizzare la stessa versione attraverso i passaggi include/complile/link

+0

grazie controllerò questo stasera e ti faccio sapere! – widgg

+0

Grazie, ha risolto il problema della libreria! Ho rimosso tutte le istanze di OpenCV che avevo e ho appena fatto il make install per inserire la versione che volevo! – widgg

+0

Sentiti libero di accettare la risposta allora. – Sam