Как я могу изменить форму этого массива numpy на (3058, 480, 640, 3)? - PullRequest
0 голосов
/ 11 декабря 2019

Я пытаюсь прочитать 3058 изображений из папки. Я хочу, чтобы мое изображение читалось как массив np с размером (3158, 480, 640, 3) dtype как uint8. Я сохраняю все изображения в список (image_list). После изменения списка на массив я получаю массив (3158,). Ниже мой код

import numpy as np
import cv2 as cv

DIR = mydir
takenFrames = 6
counter = 0

 for filename in glob.glob(DIR + '/*.png'):

                            counter += 1
                            # if counter >= no frames, open image, add img and img_label to list.
                            if (counter >= takenFrames):

                                im = cv.imread(filename) #im.shape is 480, 640
                                image_list.append(im)                   

                                #im = np.resize(im, (-1, 490, 640, 3))


image_list = np.array(image_list, dtype='uint8').reshape(-1, 480, 640, 3) / 255.0

Всякий раз, когда я пытаюсь это сделать, я получаю следующую ошибку, как показано ниже

image_list = np.array (image_list, dtype = 'uint8'). Reshape (-1, 480, 640, 3) / 255.0 Traceback (последний вызов был последним):

Файл "", строка 1, в image_list = np.array (image_list, dtype = 'uint8'). Reshape (-1, 480, 640, 3) / 255.0

ValueError: установка элемента массива с последовательностью.

Я попытался получить доступ к изображению из одной папки, и приведенная ниже строка кода работает x= np.array ([np.array (Image.open (файл)) для файла с именем файла]) # x.shape = (55, 480, 640, 3)

Я пытался сохранить x впустой массив при каждом доступе к другой папке и чтении изображений, чтобы получить все изображения 3058 как

data = np.array([])

            #I tried to append numpy array as
                                if(data.size == 0):
                                    data = im

                                else:   
                                    data = np.append(data, im, axis = 0)

, но это тоже не работает

1 Ответ

0 голосов
/ 12 декабря 2019

Я только что понял это. Некоторые изображения имеют различную форму, что является причиной. Я решил это, изменив форму изображения перед добавлением списка.

import numpy as np
import cv2 as cv

DIR = mydir
takenFrames = 6
counter = 0

for filename in glob.glob(DIR + '/*.png'):

                            counter += 1
                            # if counter >= no frames, open image, add img and img label to list.
                            if (counter >= takenFrames):

                                im = cv.imread(filename)

#some images are of size (480, 640, 3) whereas some are (490, 640, 3). I resized all images to (480, 640, 3)          

                                im = np.resize(im, (480, 640, 3))

                                image_list.append(im)
                                labels.append(label)

#converting image_list to numpy array changes my list to (3058, 480, 640, 3)

import numpy as np
image_list = np.asarray(image_list)                                                                             
...