创建图像的Numpy数组
image
image-processing
numpy
opencv
5
0

我有一些(950)150x150x3 .jpg图像文件,我想读入Numpy数组。

以下是我的代码:

X_data = []
files = glob.glob ("*.jpg")
for myFile in files:
    image = cv2.imread (myFile)
    X_data.append (image)

print('X_data shape:', np.array(X_data).shape)

输出为(950, 150) 。请让我知道为什么列表未正确转换为np.array以及是否有更好的方法来创建图像数组。

在我阅读的内容中,通过python列表将附加到numpy数组更容易,然后将它们转换为数组。

编辑:一些更多的信息(如果它帮助), image.shape回报(150,150,3)正确。

参考资料:
Stack Overflow
收藏
评论
共 2 个回答
高赞 时间 活跃

我测试了您的代码。输出对我来说很好

('X_data shape:',(4,617,1021,3))

但是,所有图像的尺寸都完全相同。

当我添加另一个具有不同范围的图像时,我将得到以下输出:

('X_data shape:',(5,))

因此,我建议您检查大小和相同数量的通道(实际上所有图像都是彩色图像)?另外,您还应该检查所有图像(或没有图像)是否都具有Alpha通道(请参阅@Gughan Ravikumar的评论)

如果仅通道数变化(即某些图像为灰色),则使用以下命令强制将所有图像加载为彩色格式:

image = cv2.imread (myFile, cv2.IMREAD_COLOR)

编辑:我从问题中使用了非常代码,仅替换为我的目录(和“ * .PNG”):

import cv2
import glob
import numpy as np

X_data = []
files = glob.glob ("C:/Users/xxx/Desktop/asdf/*.PNG")
for myFile in files:
    print(myFile)
    image = cv2.imread (myFile)
    X_data.append (image)

print('X_data shape:', np.array(X_data).shape)
收藏
评论

在列表中添加图像,然后将其转换为numpy数组,对我来说不起作用。我有一个很大的数据集,每次尝试都会使RAM崩溃。而是我追加了numpy数组,但这有其缺点。追加到列表然后转换为np数组是空间复杂的,但是追加numpy数组是时间复杂的。如果您足够耐心,这将解决RAM崩溃问题。

def imagetensor(imagedir):
  for i, im in tqdm(enumerate(os.listdir(imagedir))):
    image= Image.open(im)
    image= image.convert('HSV')
    if i == 0:
      images= np.expand_dims(np.array(image, dtype= float)/255, axis= 0)
    else:
      image= np.expand_dims(np.array(image, dtype= float)/255, axis= 0)
      images= np.append(images, image, axis= 0)
  return images

我正在寻找可以兼顾空间和时间的更好的实现。如果有人有更好的主意,请发表评论。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号