Autor

Cristina Heredia

Outlier y graduada en Ing. Informática en la ugr. Computer science.

Más artículos de Cristina Heredia

En mi último post Compilar OpenCV 3.2 para Java y usarlo en IntelliJ IDEA Expliqué cómo compilar OpenCV desde el código fuente con soporte para JAVA, sin embargo, La parte no gratuita de OpenCV no se incluye por defecto. Si quieres usar parte de la parte privativa de OpenCV, como los descriptores SIFT o SURF, deberás hacer lo siguiente:

[1]. Descarga OpenCV 3.2, descomprime y crea un directorio donde construirlo

Siguiendo los pasos de mi último post.



[2]. Descarga y descomprime la parte no gratuita

La parte no gratuita la separaron de la gratuita en OpenCV3+, por lo que necesitas descargarla aparte desde el repo github de opencv o clonar el repositorio. Después extrae opencv_contrib y ponla dentro de tu carpeta opencv :

cris@cris ~ $ cp Downloads/opencv-contrib opencv-3.2.0/

[3]. Genera los makefiles

Nos movemos a la carpeta de construcción que creamos antes dentro de la carpeta de opencv (en mi caso se llama build), y escribimos:

cris@cris~$ cmake -DBUILD_SHARED_LIBS=OFF -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=../dist -DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules ..

Con DOPENCV_EXTRA_MODULES_PATH=../opencv_contrib/modules estamos especificando donde encontrar la parte no gratuita.

Si la generación de los makefiles ha sido correcta, entonces ya puedes compilar. Si estás compilando openCV para JAVA, debes comprobar que la variable $JAVA_HOME tiene el path de tu JDK y que esta está visible por procesos hijo. Para ello, cuando hagas: echo $JAVA_HOME te deberá mostrar el path de tu JDK. Si no, en una terminal, establece el valor de la variable a el path de tu JDK y expórtala, por ejemplo:

cris@cris ~$ export JAVA_HOME=/home/jdk1.8.0_111/

Fíjate cuando estés generando el makefile, que la salida para el campo de Java es así:

building makefiles

Es decir, que hay un path para JNI especificado,y Java wrappers está a YES.

[4]. Construye

ejecuta make para compilar openCV con Java y crear un jar:

cris@cris ~/opencv-3.2.0/build $ make -j8

-j8 es por JDK8. Deberás poner aquí tu versión de JAVA.

Asegúrate de que los ficheros opencv-320.jar y libopencv_java320.so (.so o .dll) han sido creados dentro de /build.

cris@cris ~/opencv-3.2.0/build $ ls -R | grep opencv-320.jar
opencv-320.jar
opencv-320.jar.dephelper

cris@cris ~/opencv-3.2.0/build $ ls -R | grep libopencv_java320.so
libopencv_java320.so

[5]. Edita el archivo features2d_manual.hpp

Ok, si la construcción ha ido bien, vete a /modules/features2d/misc/java/src/cpp:

cris@cris ~/opencv-3.2.02 $ cd modules/features2d/misc/java/src/cpp/

y edita features2d_manual.hpp con tu editor de texto favorito, como sigue:

//name = name + "SIFT"; por fd=xfeatures2d::SIFT::create(); y //name = name + "SURF"; por fd=xfeatures2d::SURF::create();

case SIFT:
    de = xfeatures2d::SIFT::create();
    break;
    case SURF:
    de = xfeatures2d::SURF::create();
    break;

[5].Reconstruye para aplicar los cambios

Vete a tu carpeta opencv/build y ejecuta make install. Cuando finalice, sólo necesitarás incluir los ficheros .so y .jar en tu proyecto de openCV y podrás usar los descriptores SIFT y SURF en tu código.

Referencias:

Categorías:Etiquetas:

Quizá también te interese leer...