我是python的新用户,需要我的图像数据集代码的一些帮助,我想以(x_train,y_train),(x_test,y_test)的形式制作数据集。我的目录中已经有图像。我的数据集目录中有多个类,其中包含train和test文件夹。
我想从目录中读取整个图像。我已经尝试过一些代码,但是会引发错误。
row = 256
column = 256
channel = 3
class = 30 random
train = 'directory'
test = 'directory'
train_images = [train+i for i in os.listdir(train)]
test_images = [test+i for i in os.listdir(test)]
def read_image(filepath):
img = cv2.imread(filepath,cv2.IMREAD_COLOR)#i have RGB images
return
def prepare_data(images):
x = len(images)
y = np.zeros((x,row,column,channel),dtype=np.uint8)
z = np.zeros((class,x))
for i,image_file in enumerate(images)
a[i,:] = read image(image_file) #here how i get all images from different classes directories
if 'class1' in image_file.lower():
z[0,i] = class name1
elif 'class2' in image_file.lower():
z[1,i] = class name2
elif 'class3' in image_file.lower():
z[2,i] = class name3
...
....
....
return y,z
这里我遇到了问题,它无法访问来自不同类的整个图像。有人可以帮我吗?
答案 0 :(得分:0)
您可以遍历文件名,使用编写的函数read_image()
加载文件并将其附加到列表中。同样根据名称的条件,您也可以附加标签。
请参见下面的代码,以实现perpare_data()
函数。
def prepare_data(images):
x, y = [], []
for image_file in images:
img = read_image(image_file)
x.append(img)
if 'class1' in image_file.lower():
y.append(class_name_1)
elif 'class2' in image_file.lower():
y.append(class_name_2)
elif 'class3' in image_file.lower():
y.append(class_name_3)
x = np.array(x)
y = np.array(y)
return x, y
您可以按如下所示使用它来获取x
和y
数组。
train_x, train_y = prepare_data(train_images)
test_x, test_y = prepare_data(test_images)
此外,您必须像这样更改路径定义,
train = 'directory//'
test = 'directory//'
在您提供的用于读取图像的代码中,读取后不会返回图像,如下所示更新代码,
def read_image(filepath):
img = cv2.imread(filepath,cv2.IMREAD_COLOR)#i have RGB images
return img