Abh*_*sal 11 python opencv numpy image image-processing
我有一些(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)
Run Code Online (Sandbox Code Playgroud)
输出是(950, 150).请让我知道为什么列表没有np.array正确转换,以及是否有更好的方法来创建图像数组.
在我读过的内容中,通过python列表更容易完成追加numpy数组,然后将它们转换为数组.
编辑:一些更多信息(如果它有帮助),正确image.shape返回(150,150,3).
Dom*_*Cat 14
我测试了你的代码.输出对我来说很好
('X_data形状:',(4,617,1021,3))
但是,所有图像都是完全相同的尺寸.
当我添加另一个具有不同范围的图像时,我有这个输出:
('X_data形状:',(5,))
所以我建议检查尺寸和相同数量的通道(就像所有图像的彩色图像一样)?你也应该检查所有图像(或没有图像)是否都有alpha通道(参见@Gughan Ravikumar的评论)
如果只有通道数变化(即某些图像为灰色),则强制将所有颜色加载到颜色格式中:
image = cv2.imread (myFile, cv2.IMREAD_COLOR)
Run Code Online (Sandbox Code Playgroud)
编辑:我使用了问题中的代码,只替换为我的目录(和"*.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)
Run Code Online (Sandbox Code Playgroud)
将图像附加到列表中,然后将其转换为 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
Run Code Online (Sandbox Code Playgroud)
我正在寻找可以兼顾空间和时间的更好的实现。如果有人有更好的主意,请发表评论。