a=[]
for (x,y,w,h) in faces:
for (ex,ey,ew,eh) in eyes:
cv2.rectangle(roi_color,(ex,ey),(ex+ew,ey+eh),(0,255,0),2)
a.append(eyes)
i+=1
print(a)
eyes - это результат обнаружения от detectMultiScale с использованием eye_cascade (обнаружение внутри лица, но опущено).
Скажем, (ex, ey, ew, eh) - это 4 координаты, которые необходимо сохранить в массиве для каждой итерации этого цикла.
Результат для каждой итерации выглядит следующим образом: [54, 46, 90, 103] Но иногда это выглядит так: [[20 34 56 41], [34 56 78 89]]
Иногда значение (ex, ey, ew, eh) может быть до 4 значений массива в одном массиве.
Как мы можем хранить эти многомерные выходные данные в массиве numpy? Он не имеет фиксированного размера, иногда это массив из 4-х координат; иногда это массив из множества наборов по 4 координаты.






Соберите их в список, а затем объедините:
>>> out = []
>>> for i in range(5):
... out.append(np.squeeze(np.full([i, 4], i))) # squeeze to make it more difficult
...
>>> out
[array([], shape=(0, 4), dtype=int64), array([1, 1, 1, 1]), array([[2, 2, 2, 2],
[2, 2, 2, 2]]), array([[3, 3, 3, 3],
[3, 3, 3, 3],
[3, 3, 3, 3]]), array([[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4]])]
>>> np.r_[('0,2,1', *out)]
array([[1, 1, 1, 1],
[2, 2, 2, 2],
[2, 2, 2, 2],
[3, 3, 3, 3],
[3, 3, 3, 3],
[3, 3, 3, 3],
[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4],
[4, 4, 4, 4]])
Здесь мы используем «волшебный» конкатенатор r_; его первый аргумент '0,2,1' означает: объединить вдоль оси 0, сделать все 2D, если оси должны быть добавлены, существующие размеры начинаются с оси 1., поэтому [1, 1, 1, 1] перед объединением преобразуется в [[1, 1, 1, 1]].
Лучше придерживаться списка