[Jderobot] Conflicto entre librerias de OpenCV

Daniel Gómez Gómez danigom en terra.com
Mie Abr 9 14:09:46 CEST 2014


Hola:

Parece que he encontrado todas las dependencias donde se usaba cv.h y al cambiarlas ya he conseguido compilar. De todas formas, si me vuelvo a encontrar un problema parecido, haré lo que dices, José María. Los tipos de datos de Colorspaces, por debajo son cv::Mat así que por ese lado por el momento nunca he tenido problema al usar las funciones de OpenCV.

Muchas gracias por vuestra ayuda.

Saludos.


-----Mensaje original-----
De: JoseMaria [mailto:josemaria.plaza en gmail.com] 
Enviado el: miércoles, 09 de abril de 2014 9:17
Para: Daniel Gomez Gomez
CC: jde-developers en gsyc.es
Asunto: Re: [Jderobot] Conflicto entre librerias de OpenCV

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



-----
No se encontraron virus en este mensaje.
Comprobado por AVG - www.avg.com
Versión: 2014.0.4355 / Base de datos de virus: 3882/7317 - Fecha de publicación: 04/08/14



More information about the Jde-developers mailing list