OpenCV InputArray / OutputArray
Acababa de compilar la última versión de OpenCV 2.3. Y su decisión de cambiar toda la entrada / salida de Matrix en InputArray / OutputArray desordena todo. El mismo fragmento de código que funcionaba bien en OpenCV 2.2 ahora no vale nada.
Hay dos soluciones que aceptaría:
Mostrándome dónde puedo descargar OpenCV 2.2 para Linux, con todos los módulos, es importante que no falte la costura (traté de encontrar una adecuada, pero siempre falta la costura).
Ayúdame a resolver lo que estoy describiendo a continuación.
OpenCV 2.4, incluso si aún es beta, lo ha solucionado y debería cambiarme 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 llamo 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 bloquea en ese lugar
Tengo un problema similar con cv :: FindHomography. Lo que pasa es que el código se ejecutó correctamente ayer y ahora, esta cosa de 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! Debe haber una solución para esto!