ValueError: невозможно преобразовать массив размером 230 в форму (3 600 800) - PullRequest
0 голосов
/ 15 марта 2019

Я читаю 230 изображений в виде массивов из 2 разных папок и изменяю его размер таким образом, чтобы он сохранял соотношение сторон без изменений для каждого изображения (Ширина измененного размера изображения = 600 * высота = 800). После этого я пытаюсь разделить метки и массивы изображений на 2 разных списка. Теперь, прежде чем передать список массивов изображений в модель CNN, я изменяю его в формат ([- 1, 3, 600, 800]), но получаю сообщение об ошибке:

ValueError: невозможно преобразовать массив размером 230 в форму (3 600 800)

Как я могу изменить его в вышеуказанном формате?

Код написан:

def create_data():
    for category in LABELS:  
        path = os.path.join(DATADIR,category)  
        class_num = LABELS.index(category)  # get the classification  (0 or a 1).
        for img in tqdm(os.listdir(path)):
            img_array = cv2.imread(os.path.join(path,img))  # convert to array
            fac = np.array(img_array).shape[0]/np.array(img_array).shape[1]
            new_array = cv2.resize(img_array, (600, int(np.ceil((fac*600)))))# resize to normalize data size
            data.append([new_array, class_num])  # add to data


create_data()


Xtest = []
ytest = []


for features,label in data:
    Xtest.append(features)
    ytest.append(label)

X = np.array(Xtest).reshape([-1, 3, 600, 800]) 

Ответы [ 2 ]

1 голос
/ 15 марта 2019

После cv2.resize все ваши изображения имеют высоту 600, но разной ширины.Это означает, что все они имеют разное количество пикселей, может быть, слишком много или слишком мало, чтобы сформировать ожидаемую выходную форму.Вы также не сможете объединить эти изображения в один большой массив.

Вам потребуется обрезать / дополнить изображения, чтобы все они имели одинаковый размер.

0 голосов
/ 15 марта 2019

Не изменяйте размер всего массива, изменяйте размер каждого изображения в массиве отдельно.

X = np.array(Xtest).reshape([-1, 3, 600, 800]) 

Это создает одномерный массив из 230 элементов. Если вы вызовете для него функцию изменения формы, numpy попытается изменить этот массив в целом, а не отдельные изображения в нем!

...