Operaciones básicas en imágenes

OpenCVOpenCVBeginner
Practicar Ahora

💡 Este tutorial está traducido por IA desde la versión en inglés. Para ver la versión original, puedes hacer clic aquí

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.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL opencv(("OpenCV")) -.-> opencv/BasicOperationsGroup(["Basic Operations"]) opencv/BasicOperationsGroup -.-> opencv/dtype("Dtype Property") opencv/BasicOperationsGroup -.-> opencv/imread("Image Read") opencv/BasicOperationsGroup -.-> opencv/imshow("Image Show") opencv/BasicOperationsGroup -.-> opencv/imwrite("Image Write") opencv/BasicOperationsGroup -.-> opencv/merge("Image Merge") opencv/BasicOperationsGroup -.-> opencv/shape("Shape Property") opencv/BasicOperationsGroup -.-> opencv/size("Size Property") opencv/BasicOperationsGroup -.-> opencv/split("Image Split") subgraph Lab Skills opencv/dtype -.-> lab-67174{{"Operaciones básicas en imágenes"}} opencv/imread -.-> lab-67174{{"Operaciones básicas en imágenes"}} opencv/imshow -.-> lab-67174{{"Operaciones básicas en imágenes"}} opencv/imwrite -.-> lab-67174{{"Operaciones básicas en imágenes"}} opencv/merge -.-> lab-67174{{"Operaciones básicas en imágenes"}} opencv/shape -.-> lab-67174{{"Operaciones básicas en imágenes"}} opencv/size -.-> lab-67174{{"Operaciones básicas en imágenes"}} opencv/split -.-> lab-67174{{"Operaciones básicas en imágenes"}} end

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

Dividiendo y combinando 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.