OpenCV conce a OpenGL mediante Java
OpenCV
Opencv en un conjunto de librerías para el manejo y procesamiento de gráficos. Esta librería esta desarrollada originalmente en C/C++, pero hay implementaciones de estas para varios lenguajes, incluyendo Java. Aunque ciertamente no es una implementación como tal, es mas bien un wraper al compilado resultante del código de C/C++. Este wraper en java es realizado por medio de JNI (Java Native interface)
Enlace: OpenCv
OpenGL
OpenGL es un conjunto de librerías que permiten una interacción con mejor desempeño hacia los dispositivos gráficos, así como manejo de entornos tridimensionales. Esto al igual que OpenCV cuanta con wrapers para diversos lenguajes. a diferencia de OpenCV, los encargados de mantener los wrapers, no son las mismas gente que desarrollan las librerías, así que no se debe de esperar una compatibilidad del 100% en esta librería. El wraper mas usado de java es JOGL, este tiene soporte hasta el momento para la versión 4.1 de openGL.
Enlaces: OpenGl
Trabajando con OpenCV
La unidad principal de trabajo de OpenCV es la estructura llamada Mat, la cual encapsula la representación de una imagen. Cuando se maneja OpenCV en C/C++, se puede recurrir a unas ventanas existentes dentro de las librearías de OpenCV. Esta ventanas no estan presentes dentro del wraper de Java.
La manera en que se puede visualizar la imagen contenida dentro de una estructura Mat, se debe de recurrir a la oferta gráfica dentro de Java. En esta oferta esta AWT y Swing.
Aunque en las ultimas versiones de java se ha mejorado el rendimiento de las implementaciones de las librerías gráficas, esto aun queda algo abajo de las implementaciones hechas en C/C++. Parte del problema es la cantidad y tipo de objetos que se deben de crear y manipular. Esto hace trabajar bastante al Garbage Collector de java y por ende cause un deterioro en el desempeño.
Una solución ideal seria extraer directamente el contenido de la imagen como un arreglo de bytes e inyectarlo directamente al buffer de video. Esto teóricamente mejoraría el desempeño de la representación gráfica de la estructura Mat dentro de java.
El problema anterior puede ser resuelta si se aprovecha el refinamiento del manejo gráfico conseguido por las librerías de OpenGL. Lo anterior es posible debido al wraper existente para java. Próximamente estaré reportando los hallazgos realizados al integrar ambos wrapers dentro de Java.



No hay comentarios:
Publicar un comentario