我想阅读多个.jpg图片,这些图片位于3个单独的文件夹中。 3个文件夹位于同一路径上。我试着这样做:
path1 = os.path.abspath('Type_1')
path2 = os.path.abspath('Type_2')
path3 = os.path.abspath('Type_3')
folder = os.path.join(path1, path2, path3)
def load_images_from_folder(folder):
images = []
for filename in os.listdir(folder):
if filename.endswith(".jpg"):
img = cv2.imread(os.path.join(folder, filename))
if img is not None:
images.append(img)
return images
print(load_images_from_folder(folder))
但它只返回最后一条路径而不是所有路径。我还尝试使用相对路径,例如:
path1 = os.path.relpath('Type_1')
path2 = os.path.relpath('Type_2')
path3 = os.path.relpath('Type_3')
folder = os.path.join(os.path.sep, path1, path2, path3)
但仍然是同样的问题。有人可以帮忙吗?
答案 0 :(得分:2)
你的return images
行在你的循环中,所以它会在找到任何匹配结果后立即返回。你只希望它在整个循环结束后返回。
减少return语句的缩进,使其在循环之后而不是在其中。
def load_images_from_folder(folder):
images = []
for filename in os.listdir(folder):
if filename.endswith(".jpg"):
img = cv2.imread(os.path.join(folder, filename))
if img is not None:
images.append(img)
return images
[编辑]
如果你想查看多个相邻的文件夹,你需要这样的东西:
root_folder = '[whatever]/data/train'
folders = [os.path.join(root_folder, x) for x in ('Type_1', 'Type_2', 'Type_3')]
all_images = [img for folder in folders for img in load_images_from_folder(folder)]
这将在每个文件夹上调用load_images
,并将所有结果放入一个列表中。
答案 1 :(得分:2)
如果我正确理解了问题,您的文件结构如下所示:
- Type1
- Image1.jpg
- Image2.jpg
- Type2
- Image1.jpg
- Image2.jpg
- Type3
- Image1.jpg
- Image2.jpg
如果这是真的,则os.path.join调用是错误的(它将导致一个字符串,其中显示“Type1 / Type2 / Type3”,这对您没有任何帮助)。
我认为您正在寻找的代码如下:
def load_images_from_folder(folder):
images = []
for filename in os.listdir(folder):
if any([filename.endswith(x) for x in ['.jpeg', '.jpg']]):
img = cv2.imread(os.path.join(folder, filename))
if img is not None:
images.append(img)
return images
folders = [
'Type1',
'Type2',
'Type3',
]
for folder in folders:
images = load_images_from_folder(folder)
# your code that does something with the return images goes here
答案 2 :(得分:0)
我知道这真的很旧,但最近对我有用。
def create_dataset(img_folder):
img_data_array=[]
class_name=[]
for dirl in os.listdir(img_folder):
for file in os.listdir(os.path.join(img_folder,dirl)):
if any([file.endswith(x) for x in ['.jpeg', '.jpg']]):
image_path=os.path.join(img_folder,dirl,file)
image=cv2.imread(image_path,cv2.COLOR_BGR2RGB)
img_data_array.append(image)
class_name.append(dirl)
return img_data_array,class_name
img_data, class_name =create_dataset(train_folder)