У меня есть (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)
Как вы создаете '' cnt'' или 'contoure'? –
Я отредактировал свое оригинальное сообщение. Мой ответ находится в EDIT. – recodeFuture
Я нашел решение. all_cnt должен иметь тип int32! – recodeFuture