I am trying to append a sub image which is numpy array objects to a list.
temp = []
for color in COLOUR_RANGE:
#Some code to extract the color region which is represented in numpy
if cv2.contourArea(coloured_cnt) > 400:
x, y, w, h = cv2.boundingRect(coloured_cnt)
coloursRect = cv2.cvtColor(img[y:y+h, x:x+w], cv2.COLOR_BGR2RGB)
coloursRect_1D = np.vstack(coloursRect)/255
temp.append(coloursRect_1D.copy())
print(len(temp))
print(type(temp))
But the length of the list is added by two every loop.
2
<class 'list'>
4
<class 'list'>
6
<class 'list'>
8
<class 'list'>
10
However, if i create a new list as follows
temp = [
np.vstack(coloursRectList['blue'])/255,
np.vstack(coloursRectList['green'])/255,
np.vstack(coloursRectList['yellow'])/255,
np.vstack(coloursRectList['red'])/255,
np.vstack(coloursRectList['black'])/255,
print('len of temp', len(temp))
print('type of temp', type(temp))
The output is as expected
len of temp 6
type of temp <class 'list'>
I prefer the first method as it would be more dynamic so that I can
EXTRACTED = np.array(np.vstack(temp))
I am wondering how to append numpy object to a list properly. Any help is appreciated.
This is the temp after the first iteration. Since it is an subimage so it would be too big to be shown.

Code tried to reproduce the error with numpy but it fails to reappear.
I am not sure what goes wrong.
import numpy as np
mylist = []
a = np.zeros(shape=(96, 93, 3))
b = np.vstack(a)/255
print(a.shape)
print(type(a))
print(b.shape)
print(type(b))
for i in range(5):
mylist.append(b.copy())
print(len(mylist))
Output
(96, 93, 3)
<class 'numpy.ndarray'>
(8928, 3)
<class 'numpy.ndarray'>
1
2
3
4
5
>Solution :
Python list.append() method appends only a single element regardless of its type, it’s not possible to get the list length increased by two after a single append call. You must have "temp" changed in another place in the loop, please double-check.