OpenCV (Open Source Computer Vision Library) es una biblioteca de código abierto que incluye varios cientos de algoritmos de visión por computador. Esta publicada bajo una licencia BSD, lo cual permite que sea usada libremente para propósitos comerciales y académicos. Es multiplataforma, existiendo versiones para Windows, GNU/Linux, Mac OSX, iOS y Android. Así como también, podemos encontrar interfaces para C, C++, Java y Python.
Posee una estructura modular, estando agrupadas la mayoría de funciones de la biblioteca en los siguientes módulos:
- CORE: donde se defienen las estructuras de datos básicas que utilizan el resto de modulos.
- IMGPROC: módulo de procesamiento de imágenes, donde encontraremos funciones para el filtrado lineal/no lineal, transformaciones afines, conversión del espacio de color, histogramas....
- VIDEO: modulo de análisis de video que incluye algoritmos para la estimación del movimiento, extracción del fondo y seguimiento de objetos.
- CALIB3D: Algoritmos básicos de visión multiple como calibración de camaras estereo, correspondencia o reconstrucción 3D.
- FEATURES2D: detectores de características, descriptores y comparadores.
- OBJDETECT: detección de objetos e instancias de las clases predefinidas, como por ejemplo: caras, ojos, gente, coches....
- HighGUI: todo lo relacionado a la interfaz grafica de OpenCV y las funciones que permiten importar imágenes y video.
- GPU: algoritmos acelerados por hardware para distintos modulos OpenCV.
- y algunos otros modulos de ayuda.
Cabe decir que es una biblioteca con muchas posibilidades y con una amplia comunidad de desarrolladores. Por lo que, aunque es compleja utilizar, normalmente encontraremos soporte y ayuda para cualquier problema que podamos tener.
Vamos a ver como instalarla en Linux.
Instalación con apt-get
Si tenemos una versión actualizada de Ubuntu esta es la opción mas sencilla y rapida, ya que en las ultimas versiones de Ubuntu (a partir de la 12.04) o Debian podemos instalarla directamente desde apt-get.
Primero actualizamos:sudo apt-get update sudo apt-get upgradey una vez estemos a la última podemos instalar la biblioteca en sí con:
sudo apt-get install libopencv-devPara poder usarla con Python necesitaremos instalar el siguiente paquete:
sudo apt-get install python-opencvPor último, podemos bajarnos la documentación y algunos ejemplos de aplicaciones ya hechas con:
sudo apt-get install opencv-docComo veis no tiene más complicación. A partir de aquí podemos probar algunos de los ejemplos que encontraremos en la documentación de OpenCV.
Compilando e instalando las OpenCV
En el caso de que trabajemos con una versión de Ubuntu más antigua o con otro tipo de distribución Linux y no tengamos disponible el paquete, tendremos que compilar e instalar OpenCV nosotros mismos en nuestra máquina.Herramientas
Antes de nada necesitamos una serie de herramientas imprescindibles:- build-essential (GCC 4.4.x)
- cmake 2.6 o superior (CMake es una herramienta multiplataforma de automatización de código)
- pkg-config (para manejar los flags del compilador, usado en la configuración)
sudo apt-get install build-essential sudo apt-get install cmake sudo apt-get install pkg-configSi queremos usar las OpenCV con Python y trabajar de manera mas avanzada con las imagenes que procesemos, deberíamos también instalar los siguientes paquetes:
- libgtk2.0-dev (archivos de desarrollo para la biblioteca de interfaces de usuario GTK+. Este es el backend por defecto para highgui)
- python-dev (paquete de desarrollo para Python 2.6 o superior)
- python-numpy (Numpy)
- python-tk
sudo apt-get install libgtk2.0-dev python-dev python-numpyAhora vamos con los paquetes que se utilizan para leer y escribir imagenes o video en distintos formatos y mostrarlos en ventanas. No es necesario instalarlos, y de no hacerlo OpenCV usará las versiones por defecto que vienen con la biblioteca, pero en el caso de que algún modulo no funcione puede deberse a que no tiene el codec para leer el video o algún problema relacionado con la falta de alguno de estos paquetes.
sudo apt-get install libjpeg-dev libtiff4-dev libjasper-dev libopenexr-dev libtbb-dev libeigen2-dev yasm libfaac-dev libopencore-amrnb-dev libopencore-amrwb-dev libtheora-dev libvorbis-dev libxvidcore-dev libx264-dev libqt4-dev libqt4-opengl-dev sphinx-common texlive-latex-extra libv4l-dev libdc1394-22-dev libavcodec-dev libavformat-dev libswscale-dev
Código fuente
Una vez tengamos todo listo procedemos con la descarga del código de OpenCV. Podemos obtenerlo de la web oficial o directamente desde Sourceforge. Las ultimas versiones ahora también están en GitHub. Cogemos el que más rabia nos de:
GitHub:
git clone https://github.com/Itseez/opencv.git cd opencvó Sourceforge:
wget http://downloads.sourceforge.net/project/opencvlibrary/opencv-unix/2.4.5/opencv-2.4.5.tar.gz tar xzvf opencv-2.4.5.tar.gz cd opencv-2.4.5
Compilación
Ahora vamos a generar el makefile que define que partes de OpenCV necesitan ser compiladas. Ten en cuenta que la sintaxis de CMake es:cmake [<parametros opcionales>] <ruta al código fuente>;Creamos el directorio build y entramos:
mkdir build cd buildAhora configurarmos todo con lo que vayamos a trabajar de esta biblioteca y generar el makefile:
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local ..Comprueba que esto no te da ningún error. En caso de que sí, retrocede e instala los paquetes extra y ejecuta cmake de nuevo. Ahora es momento de ir a por un café mientras compilamos OpenCV. Simplemente lanzamos make:
makePor último, para instalar la biblioteca ejecutamos:
sudo make installEste último paso no es necesrio si usamos CMake en nuestros proyectos. Si no quieres instalarla en /usr/local, puedes usarla desde donde la has compilado.
Configuración
Ahora vamos a configurar la ruta a OpenCV. Esto se especifica creando un archivo llamado "opencv.conf" en el directorio "/etc/ld.so.conf.d/". En este archivo añadiremos en una nueva linea /usr/local/lib.sudo gedit /etc/ld.so.conf.d/opencv.conf # y añadimos /usr/local/liby configuramos la biblioteca ejecutando:
sudo ldconfig -vEsto crea los enlaces y el cache necesarios para las bibliotecas más recientes que se encuentren en los directorios especificados en los archivos de /etc/ld.so.conf/(en este caso OpenCV) Otra opción es exportar la ruta a la variable de entorno LD_LIBRARY_PATH y enlazar dinamicamente con ldconfig
export LD_LIBRARY_PATH=~/usr/local/lib/:$LD_LIBRARY_PATH sudo ldconfigy en el caso de que no hayamos instalado OpenCV en "/usr/local/lib", que se encuentre en por ejemplo "~/OpenCV-2.4.5/build"
export LD_LIBRARY_PATH=~/opencv-2.4.5/build/:$LD_LIBRARY_PATH sudo ldconfigComo último paso nos queda establecer la variable de entorno PKG_CONFIG_PATH. Así que editamos "bash.bashrc":
sudo gedit /etc/bash.bashrcy añadimos:
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfigAhora cierra la consola y abre una nueva, reinicia el ordenador o haz logout y despues login de nuevo. De otra manera la configuración que acabamos de añadir en "bash.bashrc" no se cargará.
Probando
Vamos a probar algún ejemplo que viene con el código. Para ello, primero nos vamos al directorio donde hayamos descomprimido OpenCV.cd ~/opencv*/samples/cEn este directorio encontramos varios ejemplos en C para las OpenCV. Para compilarlos todos usamos el script "build_all.sh".
chmod +x build_all.sh ./build_all.shY probamos uno cualquiera como.
./facedetect lena.jpgEl programa deberá mostrar la siguiente imagen:

./facedetectEn el proximo post os hablaré de como instalarlas y configurarlas en Mac OSX. Los pasos a seguir son muy parecidos, de hecho el mismo código que usamos para linux nos vale para Mac. Un saludo