[Jderobot] Conflicto entre librerias de OpenCV

JoseMaria josemaria.plaza en gmail.com
Mie Abr 9 09:17:01 CEST 2014


Hola Daniel,

tal vez lo mejor que es refactorices tu componente para trabajar
directamente con Cv:Mat. Así podrás usar directamente las versiones más
recientes de OpenCV y hacer las transformaciones con ella. Tienes un
ejemplo en el repositorio de Francisco Pérez [1], en su componente
basic_component. 

Ánimo,

JoseMaria
On Tue, 2014-04-08 at 22:09 +0200, Daniel Gomez Gomez wrote:
> 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.
> 
> 
> _______________________________________________
> Jde-developers mailing list
> Jde-developers en gsyc.es
> http://gsyc.escet.urjc.es/cgi-bin/mailman/listinfo/jde-developers

-- 
http://gsyc.urjc.es/jmplaza 
Universidad Rey Juan Carlos



More information about the Jde-developers mailing list