Создание списка контуров

У меня есть (х, у) точек для контурных линий (cnt). Сравнивая структуру данных со структурой findContours возвращаемое значение (contoure) Я создал список, который выглядит практически идентично.cnt это список 3D-массивов и contoure список 3D-массивов

Я получаю следующие результаты:

len(cnt) = 140
len(contoure) = 140

cnt.shape = (20L,1L,2L)
contoure.shape = (20L,1L,2L)

np.size(cnt,0) = 140
np.size(contoure,0) = 140

np.size(cnt) = 5600
np.size(contoure) = 140

Я не понимаю, почему я получаю "индекс кортежа вне диапазона" для np.size(contoure,1) (Обратите внимание, что contoure[i] это 3D массив!) но без ошибок np.size(cnt,1) и почему np.size(cnt) != np.size(contoure),

Я предполагаю, что drawContours не работает с cnt из-за этой разницы, но я понятия не имею, почему это происходит.

РЕДАКТИРОВАТЬ: контур создается с помощью вызова findContours(). Я не знаю точно, как создается cnt, потому что мой друг запрограммировал эту часть кода, я получаю результат только в следующей форме: all_cnt:

x11 x12 ... x1n
y11 y12 ... y1n
.
.
xm1 xm2 ... xmn
ym1 ym2 ... ymn

где x1,y1 - это n пар, описывающих первый контур. Чем я использую следующий код:

cnt=[]

for i in range(140):
    a=all_cnt[2*i:2*i+2]
    a = np.reshape(np.ravel(a,order='F'),(20,1,2))
    cnt.append(a)

1 ответ

Проблема в том, что трехмерные массивы внутри списка контуров должны иметь тип int32. В моем случае я должен был определить all_cnt как all_cnt.astype(np.int32).

Если вы не используете findContours и хотите использовать drawContours(), параметр contours должен выглядеть следующим образом: list(array,array,...), где dtype для массива int32, а каждый массив выглядит следующим образом: [ [ [x1, y1] ], [ [x2, y2] ], [ [x3, y3] ], [ [x4, y4] ], ... ]. Каждый массив содержит граничные точки 1 объекта.

Другие вопросы по тегам