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 dibujar el área dentro de un contorno usando OpenCV? (la imagen fue exportada desde un archivo DXF)

Tengo una imagen que tiene varios componentes mecánicos. Se exportaron directamente del archivo dxf utilizando ezdxf. ¿Cómo puedo dividirlos y dibujar cada uno en una imagen por separado? He intentado usar contours, hierarchy = cv2.findContours(binary,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE) para dibujarlos con plt utilizando los puntos en contours. Sin embargo, el gráfico quedará borroso. ¿Hay algún método que me pueda ayudar?
A continuación se muestra la imagen. Gracias de antemano.
Imagen

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Para dividir los componentes mecánicos en la imagen y dibujar cada uno por separado, puedes seguir los siguientes pasos:

    1. Carga la imagen utilizando OpenCV y conviértela a escala de grises.
    2. Aplica un umbral para convertir la imagen en una imagen binaria.
    3. Encuentra los contornos en la imagen binaria utilizando cv2.findContours.
    4. Itera a través de cada contorno y dibújalo en una imagen separada.
    5. Guarda las imágenes separadas.

    Para mejorar la calidad de los contornos dibujados, puedes intentar aumentar el grosor de las líneas utilizando la función cv2.drawContours. También puedes experimentar con diferentes métodos de aproximación de contornos para ver cuál da los mejores resultados.

    Aquí tienes un código de ejemplo para que puedas comenzar:

    import cv2
    import numpy as np
    
    # Carga la imagen y conviértela a escala de grises
    img = cv2.imread('mechanical_components.png')
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    
    # Aplica umbral para convertir a imagen binaria
    ret, binary = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
    
    # Encuentra los contornos en la imagen binaria
    contours, hierarchy = cv2.findContours(binary, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)
    
    # Itera a través de cada contorno y dibújalo en una imagen separada
    for i, contour in enumerate(contours):
        # Crea una imagen en blanco con la misma forma que la original
        separate_img = np.zeros_like(img)
    
        # Dibuja el contorno en la imagen separada
        cv2.drawContours(separate_img, [contour], 0, (255,255,255), thickness=2)
    
        # Guarda la imagen separada
        cv2.imwrite(f'separate_{i+1}.png', separate_img)
    

    Este código creará imágenes separadas para cada componente mecánico y las guardará como archivos separados con nombres como separate_1.png, separate_2.png, etc.

Comments are closed.