Visión artificial. Tomás Domínguez Mínguez. Читать онлайн. Newlib. NEWLIB.NET

Автор: Tomás Domínguez Mínguez
Издательство: Bookwire
Серия:
Жанр произведения: Математика
Год издания: 0
isbn: 9788426733474
Скачать книгу

      • Rojo: (0, 0, 255)

      • Verde: (0, 255, 0)

      • Azul: (255, 0, 0)

      • Amarillo: (0, 255, 255)

      • Púrpura: (255, 0, 255)

      • Cian: (255, 255, 0)

Illustration

      Opcionalmente, un píxel puede tener asociado un cuarto parámetro que define su transparencia: el canal alfa. Sus valores van desde 0 (completamente trasparente) a 100 (totalmente opaco).

      Para mostrar una imagen en pantalla, previamente hay que cargarla con la función de OpenCV:

      imread(archivo)

      Su único argumento contiene el nombre del archivo donde se encuentra la imagen (o la ruta, en el caso de que no esté en la misma carpeta que el programa). Esta función también admite un segundo argumento opcional para especificar la información que se carga de la imagen. Su valor podrá ser el de cualquiera de estas constantes:

      • IMREAD_GRAYSCALE. Carga la imagen en blanco y negro. Su valor es 0.

      • IMREAD_COLOR. Carga la imagen en color (se ignora el canal alfa). Su valor es 1.

      • IMREAD_UNCHANGED. Carga la imagen incluyendo el canal alfa. Su valor es -1.

Illustration

      Si no se indica este argumento, la función toma por defecto el valor IMREAD_COLOR.

Illustration

      El canal alfa define la opacidad de un píxel, es decir, su grado de transparencia. No todos los formatos de imagen admiten este canal (que se añade a los tres correspondientes a los colores primarios). Así, por ejemplo, mientras JPG no lo permite, PNG sí contiene este tipo de información.

Illustration

      Entre los formatos de imágenes que se soportan destacan BMP, JPEG, PNG y TIFF, entre otros. OpenCV no tiene códec para GIF, por lo que el manejo de imágenes en este formato requiere la librería imageio, que tendrá que haber cargado previamente en su entorno Python. Si quiere saber cómo utilizarla, visite https://pypi.org/project/imageio/.

      Esta función devolverá un objeto de la clase ndarray, perteneciente a la librería NumPy. Dicho objeto mantiene una matriz cuyos elementos establecen el nivel de luz o color de los píxeles de la imagen.

      Una vez obtenida la imagen, la forma de mostrarla en pantalla es llamando a la función de OpenCV:

      imshow(ventana, imagen)

      El primer argumento determina el título de la ventana, mientras que el segundo contiene la imagen.

Illustration

      El tamaño de la ventana será el de la imagen. Si la resolución de esta fuera muy alta, solo se vería parte de ella.

      En el siguiente programa se utilizan ambas funciones:

Illustration

      Con la primera sentencia se importa la librería OpenCV. A continuación, se carga la imagen “cuadro.jpg” (que está dentro de la carpeta “imagenes”) con la función imread(). Su segundo argumento es 0, lo que significa que la imagen se obtiene en blanco y negro. La última sentencia la muestra en una ventana llamada “Cuadro”.

Illustration

      En la ruta de acceso al fichero de una imagen, el carácter ‘.’ simboliza el directorio en el que se encuentra el programa que se está ejecutando. Para acceder al directorio padre, se utilizaría ‘..’, como en este caso.

Illustration

      En los programas desarrollados para cada una de las prácticas, se supone que las imágenes se encuentran en archivos dentro de la carpeta “imagenes” (sin acento), situada al mismo nivel que las que contengan los programas que vaya desarrollando, siguiendo la estructura:

Illustration

      Ejecute el programa. El resultado obtenido lo puede ver a continuación.

Illustration Illustration

      Si observara que la ventana se cierra inmediatamente, añada al final del programa las sentencias:

Illustration

      Aunque se estudiarán en detalle más adelante, le avanzo que su función es la de esperar que se pulse una tecla antes de cerrar la ventana.

      Pese a que OpenCV es multiplataforma y todos los programas se han probado en Windows, puede que se produzca este efecto en otros sistemas operativos. En ese caso, acuérdese de incluir dichas sentencias en el resto de programas que no las tengan, especialmente en los utilizados en los primeros capítulos.

      Cambiando el segundo argumento de la función imread() por 1, la imagen se recuperaría con la información del color.

      img = cv2.imread(‘../imagenes/cuadro.jpg’, 1)

Illustration

      Si la imagen ya estuviera cargada en color, una forma de convertirla posteriormente a blanco y negro sería utilizando la función:

      cvtColor(imagen, espacio de color)

      El primer argumento es la imagen que va a cambiar de espacio de color, que será el determinado por el segundo argumento. En el caso de tener una imagen BGR (como en este caso) y querer pasarla a blanco y negro, su valor sería COLOR_BGR2GRAY.

Illustration

      Existen multitud de códigos de conversión de espacios de color. A lo largo de este libro tendrá ocasión de utilizar frecuentemente el que cambia de BGR al HSV (tendrá ocasión de conocerlo más adelante) y viceversa, cuyos valores son COLOR_BGR2HSV y COLOR_HSV2BGR, respectivamente. Si quiere conocer todas las posibilidades de transformación de que dispone esta función, consulte https://docs.opencv.org/3.4/d8/d01/group__imgproc__color__conversions.html.

      El siguiente código muestra un ejemplo de uso de esta función.

Illustration

      Aunque la imagen se carga en color (img), posteriormente se pasa a blanco y negro (img_byn) con la función cvtColor(), que es como finalmente se muestra.

      Este proceso de conversión de una imagen en color a otra en blanco y negro es de gran importancia en visión artificial porque:

      • Reduce el tamaño de la imagen,