如何将这个numpy数组的形状更改为(3058,480,640,3)?

时间:2019-12-11 06:56:27

标签: image numpy resize reshape numpy-ndarray

我正在尝试从文件夹中读取3058张图像。我希望将我的图片读取为大小为(3158、480、640、3)dtype为uint8的np数组。我将所有图像存储到列表(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 追溯(最近一次通话):

文件“”,第1行,在     image_list = np.array(image_list,dtype ='uint8')。reshape(-1,480,640,3)/ 255.0

ValueError:设置具有序列的数组元素。

我尝试从单个文件夹访问图像,下面的代码行有效 x = np.array([文件名中的文件为np.array(Image.open(file))])#x.shape =(55,480,640,3)

每当我访问另一个文件夹并读取图像以将所有3058张图像都作为

时,我试图将x存储在一个空的numpy数组中。
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 :(得分:0)

我刚刚弄清楚了。原因是某些图像的形状不同。我通过在添加列表之前更改图像形状来解决它。

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)