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 definen las estructuras de datos básicas que utilizan el resto de módulos.
- 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 vídeo que incluye algoritmos para la estimación del movimiento, extracción del fondo y seguimiento de objetos.
- CALIB3D: Algoritmos básicos de visión múltiple como calibración de cámaras estéreo, 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 gráfica de OpenCV y las funciones que permiten importar imágenes y vídeo.
- GPU: algoritmos acelerados por hardware para distintos módulos OpenCV.
y algunos otros módulos 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 upgrade
|
y una vez estemos a la última podemos instalar la biblioteca en sí con:
|
sudo apt-get install libopencv-dev
|
Para poder usarla con Python necesitaremos instalar el siguiente paquete:
|
sudo apt-get install python-opencv
|
Por último, podemos bajarnos la documentación y algunos ejemplos de aplicaciones ya hechas con:
|
sudo apt-get install opencv-doc
|
Como ves 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-config
|
Si 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
Los instalaremos con:
|
sudo apt-get install libgtk2.0-dev python-dev python-numpy
|
Ahora vamos con los paquetes que se utilizan para leer y escribir imágenes o vídeo 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 módulo no funcione puede deberse a que no tiene el codec para leer el vídeo 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 ganas nos de, en nuestro caso:
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 [<parametro opcionales>] <ruta al código fuente de>
|
Creamos el directorio build y entramos:
Ahora 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:
Por último, para instalar la biblioteca ejecutamos:
Este último paso no es necesario 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/lib
|
y configuramos la biblioteca ejecutando:
Esto 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 ldconfig
<pre>
|
y 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 ldconfig
|
Como último paso nos queda establecer la variable de entorno PKG_CONFIG_PATH. Así que editamos "bash.bashrc":
|
sudo gedit /etc/bash.bashrc
|
y añadimos:
|
export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pkgconfig
|
Ahora cierra la consola y abre una nueva, reinicia el ordenador o haz logout y después 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.
En 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.sh
|
Y probamos uno cualquiera como.
El programa deberá mostrar la siguiente imagen:
Esto es un ejemplo de detección facial con la famosa imagen de
Lena. Si tenemos cámara en el ordenador podemos llamar simplemente al programa sin pasarle ningún parámetro y ver que hace: