Introducción a OpenCV – Part 1

OpenCV es una de las bibliotecas de visión artificial más populares. Si desea comenzar su viaje en el campo de la visión por computadora, es de suma importancia una comprensión profunda de los conceptos de OpenCV.
En este artículo intentaré introducir los conceptos más básicos e importantes de OpenCV de forma intuitiva.
Este artículo cubrirá los siguientes temas:

  1. leyendo una imagen
  2. Extrayendo los valores RGB de un píxel
  3. Extracción de la región de interés (ROI)
  4. Cambiar el tamaño de la imagen
  5. Rotación de la imagen
  6. dibujar un rectángulo
  7. Mostrar texto

Esta es la imagen original que manipularemos a lo largo de este artículo.

Original Image

Comencemos con la simple tarea de leer una imagen usando OpenCV.

leyendo una imagen

# Importing the OpenCV library
import cv2
# Reading the image using imread() function
image = cv2.imread('image.png')
  
# Extracting the height and width of an image
h, w = image.shape[:2]
# Displaying the height and width
print("Height = {},  Width = {}".format(h, w))

Ahora nos centraremos en extraer los valores RGB de un píxel individual.
Nota: OpenCV organiza los canales en orden BGR. Entonces, el valor 0 corresponderá al píxel azul y no al rojo.

Extrayendo los valores RGB de un píxel

# Extracting RGB values. 
# Here we have randomly chosen a pixel
# by passing in 100, 100 for height and width.
(B, G, R) = image[100, 100]
  
# Displaying the pixel values
print("R = {}, G = {}, B = {}".format(R, G, B))
  
# We can also pass the channel to extract 
# the value for a specific channel
B = image[100, 100, 0]
print("B = {}".format(B))

Extracción de la región de interés (ROI)

# We will calculate the region of interest 
# by slicing the pixels of the image
roi = image[100 : 500, 200 : 700]

Region Of Interest

Cambiar el tamaño de la imagen

# resize() function takes 2 parameters, 
# the image and the dimensions
resize = cv2.resize(image, (800, 800))

Resized Image

El problema con este enfoque es que no se mantiene la relación de aspecto de la imagen. Por lo tanto, debemos hacer un trabajo adicional para mantener una relación de aspecto adecuada.

# Calculating the ratio
ratio = 800 / w
  
# Creating a tuple containing width and height
dim = (800, int(h * ratio))
  
# Resizing the image
resize_aspect = cv2.resize(image, dim)

Resizing with proper aspect ratio

Rotación de la imagen

# Calculating the center of the image
center = (w // 2, h // 2)
  
# Generating a rotation matrix
matrix = cv2.getRotationMatrix2D(center, -45, 1.0) 
  
# Performing the affine transformation
rotated = cv2.warpAffine(image, matrix, (w, h))

Rotated Image

Hay muchos pasos involucrados en la rotación de una imagen. Entonces, permítanme explicar cada uno de ellos en detalle.

Las 2 funciones principales utilizadas aquí son:

  • getRotationMatrix2D()
  • deformación afín()

getRotationMatrix2D()
Toma 3 argumentos –

  • center – Las coordenadas del centro de la imagen
  • Ángulo: el ángulo (en grados) por el cual se debe rotar la imagen
  • Escala – El factor de escala
  •  
    Devuelve una array de 2*3 que consta de valores derivados de alfa y beta
    alfa = escala * cos (ángulo)
    beta = escala * seno (ángulo)

    Rotation Matrix

    deformación afín()

    La función warpAffine transforma la imagen de origen utilizando la array de rotación:

dst(x, y) = src(M11X + M12Y + M13, M21X + M22Y + M23)

Aquí M es la array de rotación, descrita anteriormente.
Calcula nuevas coordenadas x, y de la imagen y las transforma.

Dibujar un rectángulo
Es una operación in situ.

# We are copying the original image, 
# as it is an in-place operation.
output = image.copy()
  
# Using the rectangle() function to create a rectangle.
rectangle = cv2.rectangle(output, (1500, 900), 
                          (600, 400), (255, 0, 0), 2)

Rectangle

Toma 5 argumentos –

  • Imagen
  • Coordenadas de la esquina superior izquierda
  • Coordenadas de la esquina inferior derecha
  • Color (en formato BGR)
  • Ancho de línea

 
Mostrar texto
También es una operación in situ

# Copying the original image
output = image.copy()
  
# Adding the text using putText() function
text = cv2.putText(output, 'OpenCV Demo', (500, 550), 
                   cv2.FONT_HERSHEY_SIMPLEX, 4, (255, 0, 0), 2)

Text

Toma 7 argumentos –

  1. Imagen
  2. Texto a mostrar
  3. Coordenadas de la esquina inferior izquierda, desde donde debe comenzar el texto
  4. Fuente
  5. Tamaño de fuente
  6. Color (formato BGR)
  7. Ancho de línea

Publicación traducida automáticamente

Artículo escrito por Alpha26 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *