Загрузка нескольких изображений из текстового файла

У меня есть 40 изображений, и я записал их имена в текстовый файл. Теперь я хочу вызывать эти изображения одно за другим в своей программе, используя этот текстовый файл (на Python).

Я использовал glob, чтобы найти все имена изображений (вместо текстового файла). список глобусов содержит такие имена:

img=['image0.jpg','image1.jpg',....]

Теперь, если я получаю доступ к любому изображению, например _2 _, _ 3_, это просто image0.jpg, а не 'image0.jpg', поэтому у меня возникают проблемы с загрузкой с использованием функции opencv для его загрузки. Я хочу загрузить это как

cv.LoadImage('image0.jpg')

person Maham    schedule 29.10.2013    source источник


Ответы (2)


Если ваш файл содержит полные имена файлов. Вы можете сделать следующее

import cv
with open('textFileOfImages.txt','rb') as f:
    img = [line.strip() for line in f]

#load the images at you leisure
for image in img:
    loadedImage = cv.LoadImage(image)
    #manipulate image

Если ваш файл содержит относительный путь от текущего рабочего каталога, тогда:

import os
import cv
with open('textFileOfImages.txt','rb') as f:
    img = ['%s/%s'%(os.getcwd(),line.strip()) for line in f]

Или, если ваш файл содержит относительный путь из каталога, в котором запущен текущий скрипт

import os
import cv
with open('textFileOfImages.txt','rb') as f:
     img = ['%s/%s'%(os.path.dirname(os.path.abspath(__file__)),line.strip()) for line in f]

Редактировать

Если вам нужно загрузить имена изображений из нескольких файлов, вы можете легко включить это. Предполагая, что у вас есть список имен файлов, самый простой способ - выполнить цикл за пределами оператора with.

listOfFilenames = ['filename1.txt','filename2.txt','filename3.txt']
for filename in listOfFilenames: 
    with open(filename,'rb') as f:
    ...
person RMcG    schedule 29.10.2013
comment
Что, если мы хотим загрузить изображение из двух разных текстовых файлов? Как мы можем изменить цикл for? - person Maham; 30.10.2013
comment
Большое спасибо! Я обнаружил, что одним из решений может быть использование izip itertools. - person Maham; 31.10.2013
comment
Нет проблем, itertools - чрезвычайно полезный модуль. Наслаждайтесь: D - person RMcG; 31.10.2013

Попробуйте использовать

for _file in img:
    cv.LoadImage("{0}".format(_file))

если ваш файл находится в другом каталоге,

import os
for _file in img:
    cv.LoadImage("{0}".format(os.path.join(directory, _file)))
person Siva Cn    schedule 29.10.2013