[Jderobot] Conflicto entre librerias de OpenCV

Daniel Gomez Gomez danigom en terra.com
Mar Abr 8 22:09:17 CEST 2014


Hola:

Me he encontrado con un problema al usar las librerias de Opencv, y
quisiera preguntaros si os ha pasado lo mismo.

Quiero utilizar los algoritmos SIFT, SURF y mezcla de Gaussianas con
Opencv 2.3.1 en mi componente, el cual usa cameraserver para servir las
imágenes con el vídeo y usando el ICE de jderobot 5.0.

El caso es que al compilar, al necesitar las funciones de Opencv, las
librerías de opencv2 parece que son incompatibles con las librerías por
defecto de Opencv.

Es decir, que al incluir las directivas en mi código

#include <cv.h>
#include "opencv2/opencv.hpp"

no compila, dando una lista de errores del estilo:

/usr/local/include/opencv2/core/core_c.h:1616: error: redefinition of
‘double cvReadRealByName(const CvFileStorage*, const CvFileNode*, const
char*, double)’
/usr/local/include/opencv/cxcore.h:1692: error: ‘double
cvReadRealByName(const CvFileStorage*, const CvFileNode*, const char*,
double)’ previously defined here

el cual indica que hay un problema de mismas definiciones de funciones
en ambas librerías, lo cual me parece bastante extraño el no poder usar
cv.h y opencv2/opencv.hpp en un mismo componente.

Tratando de arreglar este problema, supe que la función que quería usar
estaba en la librería background_segm.hpp así que quité el include que
hacía referencia a opencv.hpp e incluí el que he mencionado, quedando
las directivas así:

#include <cv.h>
#include "opencv2/video/background_segm.hpp"


Me daba otra serie de errores:

enorm/usr/local/include/opencv2/video/background_segm.hpp:355: error:
variable ‘cv::CV_EXPORTS_W cv::BackgroundSubtractor’ has initializer but
incomplete type
/usr/local/include/opencv2/video/background_segm.hpp:357: error:
expected primary-expression before ‘public’
/usr/local/include/opencv2/video/background_segm.hpp:357: error:
expected ‘}’ before ‘public’
/usr/local/include/opencv2/video/background_segm.hpp:357: error:
expected ‘,’ or ‘;’ before ‘public’
/usr/local/include/opencv2/video/background_segm.hpp:361: error:
expected constructor, destructor, or type conversion before ‘(’ token
/usr/local/include/opencv2/video/background_segm.hpp:365: error:
‘virtual’ outside class declaration
/usr/local/include/opencv2/video/background_segm.hpp:365: error:
variable or field ‘getBackgroundImage’ declared void
/usr/local/include/opencv2/video/background_segm.hpp:365: error:
‘OutputArray’ was not declared in this scope
/usr/local/include/opencv2/video/background_segm.hpp:379: error:
expected initializer before ‘:’ token
/usr/local/include/opencv2/video/background_segm.hpp:407: error:
expected class-name before ‘{’ token
/usr/local/include/opencv2/video/background_segm.hpp:416: error:
‘InputArray’ has not been declared
/usr/local/include/opencv2/video/background_segm.hpp:416: error:
‘OutputArray’ has not been declared
/usr/local/include/opencv2/video/background_segm.hpp:419: error:
‘OutputArray’ has not been declared
/usr/local/include/opencv2/video/background_segm.hpp:422: error: ‘Size’
has not been declared
/usr/local/include/opencv2/video/background_segm.hpp:424: error: ‘Size’
does not name a type
/usr/local/include/opencv2/video/background_segm.hpp:426: error: ‘Mat’
does not name a type
/usr/local/include/opencv2/video/background_segm.hpp:427: error: ‘Mat’
does not name a type
/usr/local/include/opencv2/video/background_segm.hpp:478: error:
expected declaration before ‘}’ token

Parece que no encuentra las declaraciones de cv::Mat que podría
proporcionarle cv.h, entre otros nombres de tipos básicos que usa
Opencv.

Tampoco puedo pasar sin usar cv.h ya que trabajo con la librería de
colorspaces y esta requiere cv.h.

Mi pregunta es si habéis podido usar sin problema las librerías cv.h y
opencv2/opencv.hpp y compilarlo en un mismo componente. Porque cada vez
que quiero usar funciones de Opencv que están en otras librerías fuera
de cv.h tengo millones de problemas.

Muchas gracias y perdonad el ladrillazo.




More information about the Jde-developers mailing list