OpenCV / JavaCV
Imagen
Existen varios tipos de transformaciones y efectos disponibles. Algunas muestras de los mismos (no todos):
-
filter2D Función para definir transformaciones lineales.
-
Filtros para suavizado de imagen:
- blur
- GaussianBlur
- medianBlur
- bilateralFilter
Aunque sus funciones son distintas (unos reducen ruido, aclaran imágenes, etc), al final buscan siempre suavizar la imagen usando distintas funciones. Si se combinan, se puede conseguir por ejemplo:
-
Transformaciones mediante conversiones de color con el método cvCvtColor(). Se le pasan índices, valores de transformación (el mismo para toda la imagen), etc, y se consiguen muchísimos efectos.
Por ejemplo:- Color a gris:
- Colores calientes:
- Color a gris:
-
Obtención de bordes mediante función cvCanny.
-
Sepia. No existe directamente, a varias implementaciones en la red. En la más típica, se pasa la imagen a escala de grises y luego se le aplica de nuevo parte del color de la imagen original para calentarla.
-
Posterización. Efecto curioso y resultón. No está directamente implementado, pero como todo, combinando varias transformaciones se consigue.
-
Transformaciones definiendo matriz de cambio de color mediante clase Mat. Con esta clase se puede hacer prácticamente cualquier cosa que se desee. Más costoso, hay que definir la matriz directamente y pasarla al objeto para que la aplique sobre cada pixel de la imagen.
Video
Se puede hacer prácticamente lo mismo que con las imágenes, pero evidentemente las necesidades del hardware son mayores. Por ejemplo, en el siguiente vídeo se captura vídeo y a la vez se reproduce el mismo vídeo en binario, esto es, todo en negro salvo las cosas que son muy brillantes que se reproducen en blanco.
Reconocimiento de objetos
Se pueden reconocer caras, manos, etc. Más complejo que la transformación de imágenes. Para hacerlo al vuelo sobre el vídeo es muy costoso, sobre imágenes no es tan exigente, es factible hacerlo con un equipo asequible.