es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo devolver el ángulo de orientación desde getOrientation() y el código de Open CV?

Estoy tratando de encontrar el ángulo de orientación de un objeto en una imagen. En la salida de la imagen, se muestra el eje y el grado de rotación, y quiero tener ese grado de ubicación para poder escribir esos datos en un archivo .csv. En otras palabras, necesito obtener el valor del ángulo en lugar de solo la anotación en la imagen. Adjunté la imagen de mi salida y a continuación se muestra la sección de datos relacionada con la orientación.

Estoy utilizando el paquete OpenCV.

for i, c in enumerate(contours):

  # Calcular el área de cada contorno
  area = cv.contourArea(c)

  # Ignorar los contornos que son demasiado pequeños o demasiado grandes
  if area < 3700 or 100000 < area:
    continue

  # Dibujar cada contorno solo con fines de visualización
  cv.drawContours(img, contours, i, (0, 0, 255), 2)

  # Encontrar la orientación de cada forma
  getOrientation(c, img)

Imagen de muestra de salida:

Imagen de muestra de salida

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para mostrar el valor del ángulo de orientación en la imagen en lugar de solo la anotación, puedes modificar el código llamando a la función getOrientation() y almacenando el valor del ángulo devuelto en una variable. Luego, puedes escribir ese valor en un archivo .csv utilizando el módulo csv incorporado de Python.

    Aquí tienes un ejemplo de implementación:

    import cv2 as cv
    import csv
    
    # Define la función para calcular la orientación y devolver el ángulo
    def getOrientation(contour, img):
      # Código para calcular la orientación y dibujar la anotación en la imagen
      # ...
    
      # Calcula el ángulo de orientación
      angle = # Código para calcular el ángulo
    
      # Devuelve el valor del ángulo
      return angle
    
    # Carga la imagen y encuentra los contornos
    img = cv.imread('ruta/a/imagen.jpg')
    gray = cv.cvtColor(img, cv.COLOR_BGR2GRAY)
    _, thresh = cv.threshold(gray, 127, 255, cv.THRESH_BINARY)
    contours, _ = cv.findContours(thresh, cv.RETR_TREE, cv.CHAIN_APPROX_SIMPLE)
    
    # Abre el archivo csv para escribir
    with open('output.csv', 'w', newline='') as csvfile:
      writer = csv.writer(csvfile)
    
      # Recorre los contornos
      for i, c in enumerate(contours):
        # Calcula el área y omite los contornos que son demasiado pequeños o demasiado grandes
        area = cv.contourArea(c)
        if area < 3700 or area > 100000:
          continue
    
        # Dibuja el contorno en la imagen y obtén el ángulo de orientación
        cv.drawContours(img, contours, i, (0, 0, 255), 2)
        angle = getOrientation(c, img)
    
        # Escribe el valor del ángulo en el archivo csv
        writer.writerow([angle])
    
    # Muestra la imagen con las anotaciones
    cv.imshow('Imagen', img)
    cv.waitKey(0)
    cv.destroyAllWindows()
    

    En el código anterior, se define la función getOrientation() para calcular la orientación de cada contorno y devolver el valor del ángulo. Las funciones cv.imread() y cv.findContours() se utilizan para cargar la imagen y encontrar los contornos.

    Dentro del bucle que procesa cada contorno, se llama a la función getOrientation() para calcular el valor del ángulo, que luego se escribe en un archivo .csv utilizando el módulo csv.

    Finalmente, la imagen anotada se muestra utilizando la función cv.imshow().

Comments are closed.