2012-04-30 8 views
6

Acababa de compilar la última versión de OpenCV 2.3. Y su decisión de cambiar todas las entradas/salidas de Matrix en InputArray/OutputArray lo estropea todo. El mismo código que funcionaba bien con OpenCV 2.2 ya no tiene valor.OpenCV InputArray/OutputArray

Hay dos soluciones aceptaría:

  1. Mostrándome donde puedo descargar OpenCV 2.2 para Linux, con todos los módulos, es importante que la costura no es que falta (He intentado encontrar uno adecuado, pero ¡las costuras siempre faltan!).

  2. Ayúdame a resolver lo que estoy describiendo a continuación.

  3. OpenCV 2.4, incluso si todavía es beta, lo ha solucionado y debería pasar a esta versión.

tengo este mensaje de excepción:

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 

En GDB, esta es la pila:

#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 

finalmente, aquí está mi código cuando estoy llamando 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); 

y cv :: Mat m_transf = (Mat_ < double> (3,3) < < 1, 0, 0, 0, 1, 0, 0, 0, 1) ;, ese es su valor cuando se usa por primera vez, ¡y se cuelga en ese lugar!

Tengo un problema similar con cv :: FindHomography. La cosa es que el código se estaba ejecutando correctamente ayer y ahora, esta cosa InputArray/OuputArray arruina todo.

¡Es muy molesto, por favor ayuda!

Además, encontré este informe aquí: OpenCV 2.2 Vs. 2.3 ¡y no es una buena señal! ¡Debería haber una solución para esto!

Respuesta

7

Parece que tiene dos versiones de OpenCV instaladas, y el vinculador intenta utilizar una diferente para vincular la que se utiliza para compilar su código.

La forma más sencilla es eliminar todas las otras versiones de OpenCV, y luego una posible ruta de la biblioteca equivocada será más explícita (somelib.so falta)

O, revise toda la configuración de PATH, banderas enlazador e incluir carpetas para asegurarse de que está utilizando la misma versión a través de los pasos include/complile/link

+0

gracias, comprobaré esto esta noche y le haré saber! – widgg

+0

¡Gracias, resolvió el problema de la biblioteca! Eliminé todas las instancias de OpenCV que tenía y solo hice la instalación make para poner la versión que quería. – widgg

+0

No dude en aceptar la respuesta. – Sam