Visión artificial. Tomás Domínguez Mínguez

Чтение книги онлайн.

Читать онлайн книгу Visión artificial - Tomás Domínguez Mínguez страница 8

Visión artificial - Tomás Domínguez Mínguez

Скачать книгу

Por ese motivo, la siguiente sentencia sería igualmente válida:

Illustration

      De las imágenes que hay más abajo, la de la izquierda corresponde al resultado de la ejecución de este programa. Las otras dos se obtendrían modificando la sentencia que asigna el color a los píxeles. En el caso del verde:

Illustration

      O si prefiere el rojo:

Illustration Illustration

      Como sabe, una imagen se representa por una matriz de elementos, cada uno de los cuales es una tupla cuyos valores determinan la intensidad del color azul, verde y rojo de cada píxel (o únicamente el nivel de luz, en caso de tratarse de una imagen en blanco y negro). Para entender la forma de acceder a un píxel, tanto para obtener su valor como para asignarle otro diferente, observe la siguiente imagen, en la que hay un píxel negro situado en la posición (3, 1).

Illustration

      Puesto que la imagen está formada por una matriz, en la que sus elementos se distribuyen por filas y columnas, si estuviera almacenada en la variable img, la forma de obtener el valor de dicho píxel (nivel de luz) sería:

      valor = img[fila, columna]

      La fila viene dada por la coordenada y, mientras que la columna es la coordenada x. Por eso, para obtener el color del punto (3, 1), se deberá usar la expresión:

      color = img[1, 3]

Illustration

      Esto suele ser motivo de confusión. Por eso, preste especial atención cada vez que tenga que acceder a un píxel de la imagen.

      Una vez que se accede a un píxel, no solo es posible obtener su valor, sino también modificarlo. Eso es precisamente lo que hará en el siguiente programa, con el que, partiendo de la imagen blanca generada en el apartado anterior, dibujará una rejilla. La forma de hacerlo será recorriendo todos sus píxeles para asignarles el valor 0 (negro) a intervalos regulares. Puesto que dichos intervalos se tomarán tanto en el eje horizontal como en el vertical, las líneas que se dibujen conformarán una rejilla.

      El código del programa es el siguiente.

Illustration Illustration

      La primera parte del programa crea una imagen en blanco de 300 × 300 píxeles de tamaño. Su código ya lo conoce, por lo que no se va a dar ninguna explicación al respecto.

Illustration

      Una vez creada dicha imagen, se asigna el valor 0 a cada píxel en las coordenadas x e y, a intervalos regulares de 50 píxeles. Es decir, se dibujan de color negro los píxeles situados en las filas o columnas 0, 50, 100, 150, 200 y 250. El resultado será una imagen formada por 6 cuadrados de lado.

      La forma de recorrer todos los píxeles de una imagen es mediante un doble bucle, cada uno de los cuales se desplaza por un eje.

Illustration Illustration

      Por simplicidad del código, no se dibujan las últimas líneas horizontal y vertical de la rejilla.

      Para identificar los píxeles que deben pintarse en negro, es decir, aquellos cuyas coordenadas x o y sean múltiplos de 50, se utiliza el operador ‘%’, que devolverá el valor 0 en esos casos.

Illustration

      La sentencia clave del programa es la que se ejecuta cuando se cumple la condición del if anterior, es decir, la que pinta de negro los píxeles de las líneas. Para ello, solo hay que acceder a ellos, tal como se ha explicado, y asignarles el valor 0.

Illustration

      Por último, se muestra la rejilla en pantalla con la función imshow().

      cv2.imshow(‘Rejilla ‘, img)

      Ejecute el programa. Cuando lo haga, obtendrá el resultado mostrado a continuación.

Illustration

      ¿Y si hubiera querido pintar la rejilla en color? En ese caso, la imagen blanca de fondo se debería haber creado con tres canales. Suponiendo que se quiere dibujar las líneas de color rojo, el programa sería:

Illustration

      El código utilizado para crear una imagen blanca de tres canales (en vez de uno, como en el programa anterior) es el mismo desarrollado para crear ventanas con el fondo de color, solo que ahora ese color es el blanco.

Illustration

      Para la asignación del color rojo a los píxeles que forman parte de las líneas de la rejilla, ahora se utiliza una terna (en este caso la que identifica el color rojo), en vez de un nivel de luz.

Illustration

      El resultado de la ejecución de este programa será el mostrado a continuación.

Illustration

      Ya sabe cómo mostrar en pantalla las imágenes cargadas previamente de un archivo o creadas dentro del propio programa como un objeto de la clase ndarray. Ahora va a aprender a guardarlas en un fichero. Para ello, OpenCV proporciona la función:

      imwrite(archivo, imagen)

      El primer argumento de esta función es el nombre del archivo (o un path) en el que se va a guardar la imagen contenida en el segundo.

      Para practicar con esta nueva función, completará el programa del apartado anterior, en el que dibujaba una rejilla, para que, en vez de mostrarla, se almacene en un archivo. El código del programa es el siguiente.

Illustration

Скачать книгу