Operaciones básicas en imágenes

OpenCVBeginner
Practicar Ahora

Introducción

Bienvenido a este tutorial sobre OpenCV-Python. En este tutorial se abordarán algunas operaciones básicas en imágenes utilizando la biblioteca OpenCV en Python.

Este es un Guided Lab, que proporciona instrucciones paso a paso para ayudarte a aprender y practicar. Sigue las instrucciones cuidadosamente para completar cada paso y obtener experiencia práctica. Los datos históricos muestran que este es un laboratorio de nivel intermedio con una tasa de finalización del 74%. Ha recibido una tasa de reseñas positivas del 95% por parte de los estudiantes.

Accediendo y modificando valores de píxeles

Antes de comenzar esta práctica, los participantes deben abrir el Shell de Python en la terminal en /home/labex/project

cd /home/labex/project

python3

Primero, comenzaremos cargando una imagen y mostrándola utilizando OpenCV:

import cv2

## Cargar una imagen
image = cv2.imread('image.jpg')

## Mostrar la imagen
cv2.imwrite('Original Image.jpg', image)

Para acceder a un valor de píxel, simplemente debemos proporcionar sus coordenadas (x, y) de la siguiente manera:

pixel_value = image[y, x]

El valor del píxel es una matriz que contiene los canales de color (B, G, R). Para modificar un valor de píxel, simplemente asigna un nuevo valor a las coordenadas correspondientes.

A continuación, se muestra un ejemplo para establecer el píxel [0:9, 0:9] en rojo:

for x in range(10):
    for y in range(10):
        image[x, y] = [0, 0, 255]  ## Establece el píxel en rojo


cv2.imwrite('Modified Image.jpg', image)

La imagen original se ve así:

Imagen original antes de la modificación

Imagen después de modificar los valores de píxeles en el rango de [0:9,0:9]:

Imagen con valores de píxeles modificados

Los usuarios pueden comprobar la corrección del resultado ejecutando el código siguiente.

Accediendo a las propiedades de la imagen

Las propiedades de la imagen incluyen el número de filas, columnas y canales, así como el tipo de datos de la imagen y el número total de píxeles.

Para acceder a la forma de la imagen (filas, columnas y canales), utiliza el atributo shape:

height, width, channels = image.shape
print(height, width, channels)

## salida
## 360 640 3

Para acceder al número total de píxeles, utiliza el atributo size:

total_pixels = image.size
print(total_pixels)

## salida
## 691200

Para acceder al tipo de datos de la imagen, utiliza el atributo dtype:

image_dtype = image.dtype
print(image_dtype)

## salida
## uint8

Estableciendo una región de interés (ROI)

Una región de interés (ROI) es una sub-imagen que podemos extraer de la imagen original. Para establecer una ROI, solo necesitamos proporcionar las coordenadas de inicio y fin.

roi = image[start_y:end_y, start_x:end_x]

Por ejemplo, para extraer una ROI de 100x100 píxeles desde la esquina superior izquierda, podemos hacer lo siguiente:

roi = image[0:100, 0:100]
cv2.imwrite('ROI.jpg', roi)

La imagen generada ROI.jpg se ve así:

Imagen de ejemplo de ROI

División y fusión de imágenes

Para dividir una imagen en sus canales de color (B, G, R), utiliza la función cv2.split():

b, g, r = cv2.split(image)

Ahora podemos mostrar los canales individuales utilizando cv2.imwrite().
Para combinar los canales de nuevo en una sola imagen, utiliza la función cv2.merge():

merged_image = cv2.merge((b, g, r))

Por ejemplo, para intercambiar los canales rojo y azul, podemos hacer lo siguiente:

swapped_image = cv2.merge((r, g, b))
cv2.imwrite('Swapped Channels Image.jpg', swapped_image)

La imagen generada Swapped Channels Image.jpg se ve así:

Canales rojo y azul intercambiados

Resumen

¡Y eso es todo! Has aprendido algunas operaciones básicas en imágenes utilizando OpenCV-Python. Estos son conceptos importantes para entender cuando se trabaja con imágenes en aplicaciones de visión por computadora y procesamiento de imágenes. Al dominar estas operaciones básicas, estarás en buen camino para desarrollar algoritmos de procesamiento de imágenes más avanzados.