Dibujar una cruz en una imagen con OpenCV

En este artículo, vamos a discutir cómo dibujar una cruz en una imagen usando OpenCV-Python. Podemos dibujar una superposición de dos líneas una encima de otra para hacer una cruz en una imagen.  

Para dibujar una línea en OpenCV, se utiliza la siguiente función.

Sintaxis: cv2.line(imagen, Punto inicial, Punto final, color, espesor)

Parámetros:  

  • Imagen: la imagen de origen en la que necesita dibujar la forma.
  • punto de partida: las coordenadas de la imagen donde debe comenzar la línea. Que está representado por una tupla de coordenadas (eje x, eje y), básicamente la ubicación del píxel desde donde comenzar.
  • endPoint: las coordenadas de la imagen donde debe terminar la línea. Que está representado por una tupla de coordenadas (eje x, eje y).
  • Color: color de la línea dibujada en la imagen. Representado por valores de color BGR en una tupla en la que cada valor está entre 0 y 255
    • (255,0,0) para AZUL
    • (0,255,0) para VERDE
    • (0,0,255) para ROJO]
  • Grosor: grosor de la línea dibujada en píxeles.

Para dibujar una cruz en una imagen, primero debemos importar las bibliotecas necesarias,

Luego, lea la imagen en la que va a dibujar la forma y luego llame a la función de línea en OpenCV para dibujar una línea a través de las coordenadas dadas del eje x y el eje y, que son básicamente la ubicación del píxel inicial y final en el imagen. En OpenCV, por alguna razón, los planos x e y son directamente opuestos a los planos cartesianos normales que usamos. Donde el eje x está en el borde superior y el eje y está en el borde izquierdo de una imagen pero al revés, lo que implica el aumento en el eje x significa moverse hacia la derecha de la imagen y aumentar en el eje y significa moverse hacia abajo en la imagen.

Y para obtener el ancho y el alto de la imagen, debemos llamar a una función simple en OpenCV que devolverá la forma de la imagen y, a partir de eso, podemos obtener el ancho y el alto de la imagen y podemos usarlo en el programa. Simplemente llame al método .shape en la imagen para obtener las dimensiones.

El programa para dibujar una cruz en una imagen,

Python3

# Importing the necessary libraries
import cv2
import numpy
 
# Reading the image
image = cv2.imread('image.png')
 
# Getting the height and width of the image
height = image.shape[0]
width = image.shape[1]
 
# Drawing the lines
cv2.line(image, (0, 0), (width, height), (0, 0, 255), 5)
cv2.line(image, (width, 0), (0, height), (0, 0, 255), 5)
 
# Showing the image
cv2.imshow('image', image)
 
cv2.waitKey(0)
cv2.destroyAllWindows()

Producción:

Nota: puede mencionar el píxel inicial y final de su elección para hacer que la cruz sea pequeña y grande según sus necesidades

Cruzar en la transmisión de la cámara web en vivo

Ahora veamos cómo dibujar una imagen en un video desde una cámara en vivo de nuestra máquina. Para esto, primero debemos iniciar nuestra cámara web en vivo, y luego debemos capturar una imagen cada milisegundo y mostrarla entre sí para obtener un video de nuestra cámara web y luego agregar las líneas superpuestas en cada cuadro que capturamos desde el cámara web cada milisegundo para lograr el resultado.

Nota: Para obtener más información sobre el uso de una cámara web con OpenCV, consulte: Acceder a la cámara web mediante Python-OpenCV

Python3

# Importing the libraries
import cv2
import numpy
 
# Initiating the webcam
vid = cv2.VideoCapture(0)
 
# Capturing frames and showing as a video
while(True):
    ret, frame = vid.read()
 
    # Getting the width and height of the feed
    height = int(vid.get(4))
    width = int(vid.get(3))
 
    # Drawing cross on the webcam feed
    cv2.line(frame, (0, 0), (width, height), (0, 0, 255), 5)
    cv2.line(frame, (width, 0), (0, height), (0, 0, 255), 5)
 
    # Showing the video
    cv2.imshow('LIVE', frame)
 
    # Making sure that we have a key to break the while loop
    # Which checks for the ascii value of the key pressed
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break
# At last release the camera
vid.release()
cv2.destroyAllWindows()

Producción:

Dibujar cruz seleccionando manualmente el área:

Podemos hacer muchas cosas con la base que acabamos de aprender. Podemos hacer maravillas en OpenCV. Ahora, por ejemplo, podemos crear a través simplemente seleccionando manualmente el área en una imagen. Todo lo que tenemos que hacer es seleccionar manualmente el área de la imagen donde necesitamos dibujar la cruz. Para esto, vamos a usar la función selectROI() de OpenCV que devolverá las coordenadas del rango de interés seleccionado en la imagen. Usando esas coordenadas podemos dibujar la cruz y mostrar la salida.  

Sintaxis: cv2.selectROI(Window_name, source image)

Parámetro:

  • window_name: nombre de la ventana donde se mostrará el proceso de selección.
  • imagen de origen: imagen para seleccionar un ROI.
  • showCrosshair: si se mostrará la verdadera cruz del rectángulo de selección.
  • fromCenter: si el verdadero origen de la selección coincidirá con la posición inicial del mouse

Ejemplo:

Python3

# Importing the modules
import cv2
import numpy
 
# Reading the image
image = cv2.imread('image.png')
 
# Function to manually select the area
r = cv2.selectROI("select the area", image)
 
# Calculating the coordinates with the coordinates
# returned by the function
opposite_x = int(r[2]) - int(r[0])
bottom_y = int(r[1]) + (int(r[3]) - int(r[1]))
 
# Drawing the cross by the calculated and
# obtained coordinates
cv2.line(image, (int(r[0]), int(r[1])), (int(r[2]), int(r[3])), (0, 0, 255), 5)
cv2.line(image, (opposite_x, int(r[1])), (int(r[0]), bottom_y), (0, 0, 255), 5)
 
# Showing the image
cv2.imshow('image', image)
 
cv2.waitKey(0)
cv2.destroyAllWindows()

Producción:

Publicación traducida automáticamente

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