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.