Saltar al contenido

Creando tu propio contorno en opencv usando python

Si te encuentras con alguna parte que no entiendes nos puedes dejar un comentario y haremos todo lo necesario de ayudarte tan rápido como podamos.

Solución:

Mirando el formato de la contornos Creo que algo como esto debería ser suficiente:

contours = [numpy.array([[1,1],[10,50],[50,50]], dtype=numpy.int32) , numpy.array([[99,99],[99,60],[60,99]], dtype=numpy.int32)]

Este pequeño programa da un ejemplo de ejecución:

import numpy
import cv2

contours = [numpy.array([[1,1],[10,50],[50,50]], dtype=numpy.int32) , numpy.array([[99,99],[99,60],[60,99]], dtype=numpy.int32)]

drawing = numpy.zeros([100, 100],numpy.uint8)
for cnt in contours:
    cv2.drawContours(drawing,[cnt],0,(255,255,255),2)

cv2.imshow('output',drawing)
cv2.waitKey(0)

Para crear su propio contorno a partir de una lista de puntos L de Python

L=[[x1,y1],[x2,y2],[x3,y3],[x4,y4],[x5,y5],[x6,y6],[x7,y7],[x8,y8],[x9,y9],...[xn,yn]]

Crear un número array ctr de L, remodelarlo y forzar su tipo

ctr = numpy.array(L).reshape((-1,1,2)).astype(numpy.int32)

ctr es nuestro nuevo contorno, dibujémoslo en uno existente imagen

cv2.drawContours(image,[ctr],0,(255,255,255),1)

Un contorno es simplemente una curva que une todos los puntos continuos, por lo que para crear su propio contorno, puede crear un np.array() con tu (x,y) puntos en orden en el sentido de las agujas del reloj

points = np.array([[25,25], [70,10], [150,50], [250,250], [100,350]])

¡Eso es!


Hay dos métodos para dibujar el contorno en una imagen dependiendo de lo que necesites:

contorno de contorno

Si solo necesita el contorno del contorno, use cv2.drawContours()

cv2.drawContours(image,[points],0,(0,0,0),2)

Contorno relleno

Para obtener un contorno relleno, puede usar cv2.fillPoly() o cv2.drawContours() con thickness=-1

cv2.fillPoly(image, [points], [0,0,0]) # OR
# cv2.drawContours(image,[points],0,(0,0,0),-1)

Código de ejemplo completo para completar

import cv2
import numpy as np

# Create blank white image
image = np.ones((400,400), dtype=np.uint8) * 255

# List of (x,y) points in clockwise order
points = np.array([[25,25], [70,10], [150,50], [250,250], [100,350]])

# Draw points onto image
cv2.drawContours(image,[points],0,(0,0,0),2)

# Fill points onto image
# cv2.fillPoly(image, [points], [0,0,0])

cv2.imshow('image', image)
cv2.waitKey()

Comentarios y valoraciones

Acuérdate de que te permitimos valorar este artículo si acertaste tu rompecabezas a tiempo.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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