Tomás Domínguez Mínguez

Visión artificial


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

alt="Illustration"/>

      En este caso, la imagen creada es de 300 × 300 píxeles. El resultado de la ejecución de este programa puede verlo a continuación.

Illustration

      Para crear una imagen blanca, tal como se muestra gráficamente en la siguiente imagen, los valores de cada uno de los píxeles deben ser 255.

Illustration

      Con el fin de facilitar la creación de dicha matriz de píxeles, NumPy dispone de una función similar a zeros(), solo que ahora el valor de todos sus elementos es 1.

      ones(dimensiones, tipo)

      Así, para crear una imagen completamente blanca, solo habría que multiplicar por 255 cada uno de los elementos de la matriz generada por dicha función. Por lo tanto, el código del programa que mostraría una imagen blanca de 300 × 300 píxeles es:

Illustration

      El resultado de la ejecución del programa anterior es la siguiente ventana.

Illustration

      Si lo que se busca es una imagen en color, los píxeles deberán contener información del nivel de intensidad de cada uno de los colores primarios, los cuales pueden tomar un valor entre 0 y 255. Por lo tanto, para crear una imagen de color azul, el código que tendría que escribir sería:

Illustration

      Como puede observar, ahora la matriz tiene una nueva dimensión, ya que sus elementos se componen de tres valores, correspondientes a los niveles de intensidad de los tres colores primarios en cada píxel.

      img = numpy.ones((alto, ancho, 3),numpy.uint8)*255

Illustration

      También podría haberse utilizado la función zeros(), ya que, posteriormente, se cambia el valor de todos los elementos de la matriz para colorear la imagen.

      La siguiente sentencia asigna el mismo color a todos los píxeles (en este caso, el azul).

Illustration Illustration

      Aunque se ha usado una tupla para asignar el color, también se podría haber empleado una lista. 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