Tutorial opencv Trackbar y Mouse

OpenCV nos provee con funciones para crear y manipular el trackbar así como también funciones para manejar los eventos del mouse, el uso de estas funciones es fácil, en este tutorial OpenCV aprenderemos como hacerlo.

Tutorial OpenCV crear un trackbar

Lo primero que debemos hacer es crear una ventana como ya aprendimos en los tutoriales OpenCV anteriores. Para crear un trackbar basta con llamar a la función createTrackbar() a la cual hay que pasarle como parámetro el nombre del trackbar, el nombre de la ventana en donde deseamos agregarlo, la dirección de memoria de la variable en donde almacenaremos el valor actual del trackbar, el valor máximo, y la función que se ejecutara cada vez que cambie el calor del trackbar.

createTrackbar( TrackbarName, "Linear Blend", &alpha_slider, alpha_slider_max, on_trackbar );

Como ejemplo utilizaremos uno disponible en el tutorial OpenCV incluido en la página oficial, se muestra como añadir mezcla a dos imágenes el valor alfa es cambiado con el trackbar.

void on_trackbar( int, void* ) 
{ 
   alpha = (double) alpha_slider/alpha_slider_max ; 
   beta = ( 1.0 - alpha ); 
   addWeighted( src1, alpha, src2, beta, 0.0, dst); 
   imshow( "Linear Blend", dst ); 
}

Si necesitamos saber en qué posición está el trackbar podemos llamar a la función getTrackbarPos() pasándole el nombre del trackbar y de la ventana, esta función nos devolverá un int que representa la posición del trackbar.

Este código se encuentra disponible en ..\opencv\samples\cpp\tutorial_code\HighGUI\AddingImagesTrackbar.cpp

Debemos recordar cambiar la ruta de las imágenes para que el proyecto se pueda ejecutar.

Tutorial opencv Mouse

Para controlar los eventos que produce el mouse contamos con la función setMouseCallback() al cual le debemos pasar como parámetro el nombre de la ventana que deseamos usar, y la función que controlara los eventos, en este tutorial OpenCV veremos cómo usar esta función.

setMouseCallback( "Uso del raton", onMouse);

La función onMouse() debe tener el siguiente formato, donde event representa el evento ocurrido y los enteros x, y las coordenadas donde se encuentra el mouse.

static void onMouse( int event, int x, int y, int, void* )
{
       switch (event)
       {
       case CV_EVENT_MOUSEMOVE:     break;
       case CV_EVENT_LBUTTONDOWN   :  break;
       case CV_EVENT_RBUTTONDOWN   :  break;
       case CV_EVENT_MBUTTONDOWN   :  break;
       case CV_EVENT_LBUTTONUP     :  break;
       case CV_EVENT_RBUTTONUP     :  break;
       case CV_EVENT_MBUTTONUP     :  break;
       case CV_EVENT_LBUTTONDBLCLK :  break;
       case CV_EVENT_RBUTTONDBLCLK :  break;
       case CV_EVENT_MBUTTONDBLCLK :  break;
       }
}

Estos son los diferentes eventos que produce el mouse, por lo general hacen lo que dice su nombre y si queremos podemos probar a ver cuándo se produce cada uno de ellos, por ejemplo si quisiéramos saber cuándo se mueve el ratón usaríamos CV_EVENT_MOUSEMOSE, x , y serían las coordenadas a las que se movió.

Recortar una imagen con el ratón

Usaremos el ratón para seleccionar una región de la imagen mostrada en la ventana, luego recortaremos la imagen basándonos en las coordenadas obtenidas por el ratón.

El funcionamiento es sencillo solo manejaremos los eventos de presión del botón izquierdo, y cuando este sea soltado, guardaremos las coordenadas para luego calcular el rectángulo de recorte, y por ultimo mostramos la imagen en la ventana.

Descargar: recortar imagen

Comentarios

Entradas populares de este blog

Conectar SQL Server con Java

Gauss Seidel y Jacobi

Entrenar OpenCV en Detección de Objetos

Procesamiento de imágenes en OpenCV

Acceso a la webcam con OpenCV