2014-10-22 1 views
1

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

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

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 из-за этой разницы, но я понятия не имею, почему это происходит.

EDIT: Контур создается вызовом findContours(). Я не знаю точно, как создается CNT, потому что мой друг запрограммирован, что часть кода, я только получить результат в следующем виде: all_cnt:

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

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

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

Как вы создаете '' cnt'' или 'contoure'? –

+0

Я отредактировал свое оригинальное сообщение. Мой ответ находится в EDIT. – recodeFuture

+0

Я нашел решение. all_cnt должен иметь тип int32! – recodeFuture

ответ

0

Проблема заключается в том, что массивы 3D внутри списка контуров должны иметь тип 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 объекта.