VISIÓN ARTIFICIAL – Iniciarse en OpenCV

por | junio 9, 2016

Cuando descubrí lo que es OpenCV y vi lo que se podía hacer con estas librerías un mundo se abrió ante mí. En ese momento se me metió en la cabeza que tenía que aprender a hacer aplicaciones con Visión Artificial.

Resulta que lo más difícil no fue la visión artificial ni el tratamiento de imagen, ni la inteligencia artificial, lo más difícil fue tener un entorno listo para realizar las aplicaciones. Probé varios entornos de programación, varias versiones de OpenCV, varios lenguajes de programación, y siempre llegaba a darme contra una pared. Me costó mucho tener un sistema con las últimas versiones de todo y con los módulos adicionales de OpenCV que creo necesarios. De eso trata este artículo:

«Cómo tener tu entorno para Programar Visión Articial con OpenCV mediante C++».

Resultado de imagen de opencv

En 1 o 2 horitas puedes tener todo preparado si sigues estos pasos.

RESUMEN:

Instalaremos Visual Studio Community 2015 como entorno de desarrollo para programar en C++. VER ANTERIOR ARTICULO.

Compilaremos todas las librerias de OpenCV 3.0 necesarias para que el Visual Studio las pueda integrar.

Configuraremos el Visual Studio correctamente: linker, debuger, includes, librerias.

Haremos un programa ejemplo y lo ejecutaremos.

INSTALAR OPENCV A MEDIDA:

1-Descargar la versión sin compilar de OpenCV de https://github.com/Itseez/opencv pinchando en “download zip”.

opencv-master

Extraer todo en la carpeta C:\opencv-master   Esta será la carpeta orígen de nuestra instalación.

2-Descargar el módulo open_contrib de github (son módulos adicionales de OpenCV), de https://github.com/Itseez/opencv_contrib  pinchando en “download zip”.

opencv_contrib-master

Extraer todo en C:\opencv_contrib-master

3-Crear la carpeta C:\opencv   y dentro de ella la carpeta  C:\opencv\build

4-Ir a C:\opencv y copiar ahí todos los archivos que están dentro de la carpeta C:\opencv-master

5-Copiar los módulos adicionales que queramos de la carpeta C:\opencv_contrib-master y pegarlos en la carpeta C:\opencv\modules    junto con los módulos originales. Os indico a continuación tódos los módulos que yo tengo instalados, como ejemplo.

módulos

6-Instalar CMAKE, que nos servirá para generar y compilar todas las librerías.

Lo podéis descargar de esta página, buscando la versión para vuestro sistema operativo. https://cmake.org/download/

Instalarlo con el procedimiento habitual.

7-Abrir el CMAKE, indicarle el directorio donde están los archivos origen que hemos preparado y donde queremos que construya todo. Como en esta imagen.

CMake

8-Pinchar en “Configure”. Seleccionar los controladores nativos del Visual Studio  (para 64 bits en mi caso). Tardará un buen rato.

CMake

Asegurarse de que NO está marcada la función WORLD.

9-Darle a “Generate”, cuando acabe se habrá generado el archivo C:\opencv\build\OpenCV.sln , abrirlo con Visual Studio. Tardará mucho en abrirse ya que empezará a hacer cosas directamente, tener paciencia.

10-Una vez esté todo acabado, en modo DEBUG: pinchar con botón derecho en Solution y hacer un BUILD.

build

Tardará mucho. Asegurarse de que se compila todo sin ningún error, darle bien de tiempo hasta que acabe.

11-Cambiar a modo RELEASE y hacer otro BUILD_ALL.

12-Hacer click derecho en CMAKE\INSTALL y seleccionar BUILD. Cambiar luego al modo DEBUG y repetir la operación.

Todo se habrá creado en la carpeta de instalación. C:\opencv\build\install

13-Crear las variables de entorno necesarias para que el sistema sepa donde está instalado OpenCV. Información sobre Variables de Entorno.

Crear la siguiente variable de entorno «del sistema»:

OPENCV_BUILD à c:\opencv\build

1

Actualizar el valor de la variable PATH:

C:\opencv\build\install\x64\vc11\bin

2

Una vez hecho esto podemos arrancar el Visual Studio y podemos crear nuestro primer proyecto usando OpenCV.

CREAR Y PREPARAR NUESTRO PRIMER PROYECTO:

Ejecutamos el Visual Studio. Creamos un nuevo proyecto, elegimos de entre los proyectos «Visual C++», el tipo «Empty Project». Y lo llamamos «Prueba1» por ejemplo.5Añadimos un nuevo archivo con extensión .cpp que contendrá el código del programa que vamos a escribir. Para ello pulsamos sobre «Project», «Add new item».12Seleccionamos «C++ file» y le llamamos «Source» por ejemplo.

6Aquí aparecerá el cuerpo de nuestro programa, en blanco obviamente.
Ir a propiedades del proyecto y  para configurar correctamente include paths y library paths.

CONFIGURACIONES PARA DEBUG

Seleccionar “Debug” y modificar lo siguiente:

En el apartado «C/C++» modificar «Aditional Include Directories» con el valor $(OPENCV_DIR)\include

En el apartado «Linker» modificar «Aditional Library Directories» con el valor $(OPENCV_DIR)\x86\vc14\lib

En el apartado «Linker \ Input» modificar «Aditional Dependencies» con el valor:

opencv_ts310d.lib;opencv_calib3d310d.lib;opencv_ccalib310d.lib;opencv_core310d.lib;opencv_features2d310d.lib;opencv_flann310d.lib;opencv_highgui310d.lib;opencv_imgcodecs310d.lib;opencv_imgproc310d.lib;opencv_ml310d.lib;opencv_objdetect310d.lib;opencv_photo310d.lib;opencv_shape310d.lib;opencv_stitching310d.lib;opencv_superres310d.lib;opencv_surface_matching310d.lib;opencv_text310d.lib;opencv_video310d.lib;opencv_videoio310d.lib;opencv_videostab310d.lib;opencv_xfeatures2d310d.lib;opencv_ximgproc310d.lib;opencv_xobjdetect310d.lib;opencv_xphoto310d.lib;%(AdditionalDependencies)

CONFIGURACIONES PARA RELEASE

Seleccionar “Release” y modificar lo siguiente:

En el apartado «C/C++» modificar «Aditional Include Directories» con el valor $(OPENCV_DIR)\include

En el apartado «Linker» modificar «Aditional Library Directories» con el valor $(OPENCV_DIR)\x86\vc14\lib

En el apartado «Linker \ Input» modificar «Aditional Dependencies» con el valor:

opencv_ts310.lib;opencv_calib3d310.lib;opencv_ccalib310.lib;opencv_core310.lib;opencv_features2d310.lib;opencv_flann310.lib;opencv_highgui310.lib;opencv_imgcodecs310.lib;opencv_imgproc310.lib;opencv_ml310.lib;opencv_objdetect310.lib;opencv_photo310.lib;opencv_shape310.lib;opencv_stitching310.lib;opencv_superres310.lib;opencv_surface_matching310.lib;opencv_text310.lib;opencv_video310.lib;opencv_videoio310.lib;opencv_videostab310.lib;opencv_xfeatures2d310.lib;opencv_ximgproc310.lib;opencv_xobjdetect310.lib;opencv_xphoto310.lib;%(AdditionalDependencies)

Ya podemos escribir el código de nuestro programa. Para este primer ejemplo hipersencillo sólo comprobaremos que todo funciona escribiendo el siguiente código que abre una ventana vacía.

#include «opencv2/highgui/highgui.hpp»
#include «iostream»
using namespace cv;
using namespace std;
int main() {
namedWindow(«ventana», CV_WINDOW_AUTOSIZE); //Crea una ventana
waitKey(0); //Espera indefinidamente o la pulsación de una tecla
return 0;
}

Lo ejecutamos en el modo debug y esperamos a ver el resultado.

ventana

El resultado puede parecer muy triste, una ventana vacía, pero así limitamos las posibilidades de error. Si os funciona bien podéis seguir con más ejemplos básicos de OpenCV.

Más adelante subiré algunos programas.

Suerte y que disfrutéis!!

 

Si te ha parecido interesante compártelo !!!

Facebooktwitterredditpinterestlinkedinmail

5 pensamientos en “VISIÓN ARTIFICIAL – Iniciarse en OpenCV

  1. Iván

    Muchas veces lo más complicado y laborioso es tener todos los programas en línea para empezar a trabajar, este tipo de publicaciones simplifican y agilizan este trabajo más tedioso y a veces interminable.
    Felicidades Iñaki, seguiremos tus publicaciones sobre este tema… Nosotros también estamos enganchadisimos 😛

    Responder
  2. alejandro

    En cmake me da un error, no descarga ffmpeg. y luego no puedo cargar videos

    Responder
    1. inakima Autor

      Hola Alejandro,
      Si sigues los pasos del tutorial y compilas los módulos que se indican, es suficiente para cargar vídeos. El que indicas no es necesario.
      Te indico un ejemplo a continuación con el que puedes cargar un video en tu carpeta de proyecto, para que veas que solo es necesario incluir «highgui»:

      #include «opencv2/highgui/highgui.hpp»
      #include

      using namespace cv;
      using namespace std;

      int main(int argc, char* argv[])
      {
      VideoCapture cap(«../imagenes/deteccion_1.avi»); // open the video file for reading

      if (!cap.isOpened()) // if not success, exit program
      {
      cout << "Cannot open the video file" << endl; return -1; } //cap.set(CV_CAP_PROP_POS_MSEC, 300); //start the video at 300ms double fps = cap.get(CV_CAP_PROP_FPS); //get the frames per seconds of the video cout << "Frame per seconds : " << fps << endl; namedWindow("MyVideo", CV_WINDOW_AUTOSIZE); //create a window called "MyVideo" while (1) { Mat frame; bool bSuccess = cap.read(frame); // read a new frame from video if (!bSuccess) //if not success, break loop { cout << "Cannot read the frame from video file" << endl; break; } imshow("MyVideo", frame); //show the frame in "MyVideo" window if (waitKey(30) == 27) //wait for 'esc' key press for 30 ms. If 'esc' key is pressed, break loop { cout << "esc key is pressed by user" << endl; break; } } return 0; }

      Responder
  3. Pingback: Detección de Objetos en la Industria (2) – Creación aplicación – El Blog de Inakima

Responder a alejandro Cancelar la respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *