Создание собственного контура в opencv с помощью python

У меня есть набор точек границ объекта.

Я хочу нарисовать его, используя opencv в качестве контура.

Я понятия не имею, как преобразовать мои точки в контурное представление.

к тому же представлению контура, которое получается следующим вызовом

  contours,_ = cv2.findContours(image,cv2.RETR_TREE,cv2.CHAIN_APPROX_SIMPLE)

какие идеи?

спасибо

3 ответов


глядя на формат контуры Я бы подумал, что чего-то подобного должно быть достаточно:

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

эта небольшая программа дает пример:

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)

чтобы создать свой собственный контур из списка python точек L

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

создать массив numpy ctr из L, изменить его и заставить его тип

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

ctr это наш новый countour, давайте нарисуем его на существующем изображения

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

чтобы добавить к ответу шерифа Кауа, я обнаружил, что мне нужно преобразовать в list и zip мой массив numpy. Чтение в массиве точек из текстового файла:

  contour = []
  with open(array_of_points,'r') as f:
      next(f) // line one of my file gives the number of points
      for l in f:
          row = l.split()
          numbers = [int(n) for n in row]
          contour.append(numbers)

  ctr = np.array(contour).reshape((-1,1,2)).astype(np.int32)
  ctr = ctr.tolist()
  ctr = zip(*[iter(ctr)]*len(contour))