У меня есть набор данных из 5966 изображений, разделенных на 4 категории.
Я загружаю их, начиная с их путей:
paths = list()
paths.append(glob.glob("C:\\immagini\\belts*.jpg"))
paths.append(glob.glob("C:\\immagini\\casual-shoes*.jpg"))
#paths.append(glob.glob("C:\\immagini\\sports-shoes*.jpg")) #Not load for now
paths.append(glob.glob("C:\\immagini\\wallets*.jpg"))
ds = np.asarray([cv2.imread(file, cv2.IMREAD_GRAYSCALE) for category in paths for file in category])
Таким образом, я получаю {ndarray } [[[... с формой (4134,80,60). На данный момент мне нужны изображения в качестве матрицы для предварительной обработки:
edges = np.asarray([cv2.Canny(image, 100, 200) for image in ds])
Затем каждое изображение становится примером для моего ученика, поэтому мне нужно выровнять матрицу. Я делаю это, используя:
X = np.reshape(edges, (len(edges), len(edges[0])*len(edges[0][0])))
Это работает отлично, но если я загружаю набор данных alla, не комментируя строку выше, размер всего набора данных равен 5966, и он загружается как {ndarray} [array ([[ ... с формой (5966). Итак, когда я пытаюсь изменить форму, я получаю:
ValueError: cannot reshape array of size 5966 into shape (5966,4800)
Почему Python не может создавать массивы длиннее, чем около 5000 элементов? Как я могу сгладить матрицы? ds = [[[...]]] -> [[...]] Мне нужен массив со всеми изображениями, где каждое изображение является списком пикселей, а не больше матрицы. Только внутренние матрицы должны быть flatten
Я получаю информацию о типе жирным шрифтом, используя Python Console в Pycharm.
UPDATE: Я решил проблему. В наборе данных есть изображение 60x60, в то время как все остальные изображения имеют размер 60x80. Это привело к созданию массива объекта python. В массиве uint8 каждый элемент должен иметь одинаковую форму, а для вставки изображения 60x60 python создает объект. Поэтому я изменил размер выброса, и проблема не не происходит.