Funciones esenciales de OpenCV para iniciarse en la visión artificial

La visión por computadora es un proceso mediante el cual podemos entender las imágenes y videos, cómo se almacenan y cómo podemos manipular y recuperar datos de ellos. Computer Vision es la base o se utiliza principalmente para la Inteligencia Artificial. Computer-Vision está desempeñando un papel importante en los automóviles autónomos, la robótica y las aplicaciones de corrección de fotos. 

OpenCV es la enorme biblioteca de código abierto para visión por computadora, aprendizaje automático y procesamiento de imágenes y ahora juega un papel importante en la operación en tiempo real, lo cual es muy importante en los sistemas actuales. Al usarlo, uno puede procesar imágenes y videos para identificar objetos, rostros o incluso la escritura a mano de un ser humano. Cuando se integra con varias bibliotecas, como NumPy, Python es capaz de procesar la estructura de array de OpenCV para su análisis. Para identificar patrones de imagen y sus diversas características, utilizamos el espacio vectorial y realizamos operaciones matemáticas en estas características.

En este artículo, discutiremos algunas funciones de uso común en OpenCV junto con sus aplicaciones.

Nota: Las funciones que se usan en este artículo son comunes para diferentes idiomas compatibles con OpenCV.

Imágenes de lectura

Para leer las imágenes se utiliza el método cv2.imread() . Este método carga una imagen del archivo especificado. Si la imagen no se puede leer (debido a la falta del archivo, permisos incorrectos, formato no compatible o no válido), este método devuelve una array vacía.

Imagen utilizada

Read image opencv python

Ejemplo: Python OpenCV leyendo imágenes

Python3

# Python code to read image
import cv2
  
# To read image from disk, we use
# cv2.imread function, in below method,
img = cv2.imread("geeks.png", cv2.IMREAD_COLOR)
  
# Creating GUI window to display an image on screen
# first Parameter is windows title (should be in string format)
# Second Parameter is image array
cv2.imshow("GeeksforGeeks", img)
  
# To hold the window on screen, we use cv2.waitKey method
# Once it detected the close input, it will release the control
# To the next line
# First Parameter is for holding screen for specified milliseconds
# It should be positive integer. If 0 pass an parameter, then it will
# hold the screen until user close it.
cv2.waitKey(0)
  
# It is for removing/deleting created GUI window from screen
# and memory
cv2.destroyAllWindows()

Producción:

Read image using Python Opencv

Guardar imágenes

El método cv2.imwrite() se utiliza para guardar una imagen en cualquier dispositivo de almacenamiento. Esto guardará la imagen según el formato especificado en el directorio de trabajo actual.

Ejemplo: Python OpenCV guardando imágenes

Python3

# Python program to explain cv2.imwrite() method
  
# importing cv2
import cv2
  
image_path = 'geeks.png'
  
# Using cv2.imread() method
# to read the image
img = cv2.imread(image_path)
  
# Filename
filename = 'savedImage.jpg'
  
# Using cv2.imwrite() method
# Saving the image
cv2.imwrite(filename, img)
  
# Reading and showing the saved image
img = cv2.imread(filename)
cv2.imshow("GeeksforGeeks", img)
  
cv2.waitKey(0)
cv2.destroyAllWindows()

Producción:

show image using Python Opencv

Cambiar el tamaño de la imagen

El cambio de tamaño de la imagen se refiere a la escala de las imágenes. Ayuda a reducir la cantidad de píxeles de una imagen y eso tiene varias ventajas, por ejemplo, puede reducir el tiempo de entrenamiento de una red neuronal cuanto mayor es la cantidad de píxeles en una imagen, mayor es la cantidad de Nodes de entrada que a su vez aumenta la complejidad del modelo. También ayuda a hacer zoom en las imágenes. Muchas veces necesitamos cambiar el tamaño de la imagen, es decir, reducirla o ampliarla para cumplir con los requisitos de tamaño.

OpenCV nos proporciona varios métodos de interpolación para cambiar el tamaño de una imagen. Elección del método de interpolación para cambiar el tamaño:

  • cv2.INTER_AREA: Esto se usa cuando necesitamos reducir una imagen.
  • cv2.INTER_CUBIC: Esto es lento pero más eficiente.
  • cv2.INTER_LINEAR: Esto se usa principalmente cuando se requiere hacer zoom. Esta es la técnica de interpolación predeterminada en OpenCV.

Ejemplo: cambio de tamaño de imagen de Python OpenCV

Python3

import cv2
import numpy as np
import matplotlib.pyplot as plt
  
image = cv2.imread("geeks.png", 1)
# Loading the image
  
half = cv2.resize(image, (0, 0), fx = 0.1, fy = 0.1)
bigger = cv2.resize(image, (1050, 1610))
  
stretch_near = cv2.resize(image, (780, 540),
            interpolation = cv2.INTER_NEAREST)
  
  
Titles =["Original", "Half", "Bigger", "Interpolation Nearest"]
images =[image, half, bigger, stretch_near]
count = 4
  
for i in range(count):
    plt.subplot(2, 3, i + 1)
    plt.title(Titles[i])
    plt.imshow(images[i])
  
plt.show()

Producción:

Python OpenCV Image Resizing

Espacios de color

Los espacios de color son una forma de representar los canales de color presentes en la imagen que le dan a la imagen ese tono particular. Hay varios espacios de color diferentes y cada uno tiene su propio significado. Algunos de los espacios de color populares son RGB (rojo, verde, azul), CMYK (cian, magenta, amarillo, negro), HSV (tono, saturación, valor), etc.

 El método cv2.cvtColor() se usa para convertir una imagen de un espacio de color a otro. Hay más de 150 métodos de conversión de espacio de color disponibles en OpenCV.

Ejemplo: espacios de color Python OpenCV

Python3

# Python program to explain cv2.cvtColor() method
  
# importing cv2
import cv2
  
# path
path = 'geeks.png'
  
# Reading an image in default mode
src = cv2.imread(path)
  
# Window name in which image is displayed
window_name = 'GeeksforGeeks'
  
# Using cv2.cvtColor() method
# Using cv2.COLOR_BGR2GRAY color space
# conversion code
image = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY )
  
# Displaying the image
cv2.imshow(window_name, image)
  
cv2.waitKey(0)
cv2.destroyAllWindows()

Producción:

python opencv color spaces

Imagen giratoria

El método cv2.rotate() se usa para rotar una array 2D en múltiplos de 90 grados. La función cv::rotate rota la array de tres maneras diferentes.

Ejemplo: Python OpenCV Rotar imagen

Python3

# Python program to explain cv2.rotate() method
  
# importing cv2
import cv2
  
# path
path = 'geeks.png'
  
# Reading an image in default mode
src = cv2.imread(path)
  
# Window name in which image is displayed
window_name = 'Image'
  
# Using cv2.rotate() method
# Using cv2.ROTATE_90_CLOCKWISE rotate
# by 90 degrees clockwise
image = cv2.rotate(src, cv2.cv2.ROTATE_90_CLOCKWISE)
  
# Displaying the image
cv2.imshow(window_name, image)
cv2.waitKey(0)

Producción:

Python OpenCV Rotate Image

Las funciones anteriores nos restringen a rotar la imagen en el múltiplo de 90 grados solamente. También podemos rotar la imagen en cualquier ángulo definiendo la array de rotación que enumera el punto de rotación, el grado de rotación y el factor de escala.

Ejemplo: Python OpenCV Rotar imagen por cualquier ángulo

Python3

import cv2
import numpy as np
  
FILE_NAME = 'geeks.png'
  
# Read image from the disk.
img = cv2.imread(FILE_NAME)
  
# Shape of image in terms of pixels.
(rows, cols) = img.shape[:2]
  
# getRotationMatrix2D creates a matrix needed 
# for transformation. We want matrix for rotation 
# w.r.t center to 45 degree without scaling.
M = cv2.getRotationMatrix2D((cols / 2, rows / 2), 45, 1)
res = cv2.warpAffine(img, M, (cols, rows))
  
cv2.imshow("GeeksforGeeks", res)
  
cv2.waitKey(0)
cv2.destroyAllWindows()

Producción:

Python OpenCV Rotate Image

Traducción de imágenes

La traducción se refiere al desplazamiento rectilíneo de un objeto, es decir, una imagen de un lugar a otro. Si conocemos la cantidad de cambio en la dirección horizontal y vertical, digamos (tx, ty), entonces podemos hacer una array de transformación. Ahora, podemos usar la función cv2.wrapAffine() para implementar las traducciones. Esta función requiere una array de 2×3. La array numpy debe ser de tipo flotante.

Ejemplo: Python OpenCV Image Translation

Python3

import cv2
import numpy as np
  
image = cv2.imread('geeks.png')
  
# Store height and width of the image
height, width = image.shape[:2]
  
quarter_height, quarter_width = height / 4, width / 4
  
T = np.float32([[1, 0, quarter_width], [0, 1, quarter_height]])
  
# We use warpAffine to transform
# the image using the matrix, T
img_translation = cv2.warpAffine(image, T, (width, height))
  
cv2.imshow('Translation', img_translation)
cv2.waitKey(0)
  
cv2.destroyAllWindows()

Producción:

Python OpenCV Image Translation

Detección de bordes

El proceso de detección de imágenes implica la detección de bordes afilados en la imagen. Esta detección de bordes es esencial en el contexto del reconocimiento de imágenes o la localización/detección de objetos. Existen varios algoritmos para la detección de bordes debido a su amplia aplicabilidad. Usaremos uno de esos algoritmos conocido como Canny Edge Detection

Ejemplo: Python OpenCV Canny Edge Detección

Python3

import cv2
  
FILE_NAME = 'geeks.png'
  
# Read image from disk.
img = cv2.imread(FILE_NAME)
  
# Canny edge detection.
edges = cv2.Canny(img, 100, 200)
  
# Write image back to disk.
cv2.imshow('Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()

Producción:

Python OpenCV Canny Edge Detection

Para obtener más información sobre Python OpenCV, consulte nuestro Tutorial de Python OpenCV .

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 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 *