[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