从文本文件加载多个图像

时间:2013-10-29 18:28:46

标签: python opencv glob

我有40张图片,我已将它们的名字写在文本文件中。现在我想在我的程序中逐个调用这些图像,使用该文本文件(在Python中)。

我用glob来查找所有图像名称(而不是文本文件)。 glob list包含如下名称:

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

现在如果我访问img[0]img[1]之类的任何图片,那么它只是image0.jpg而不是'image0.jpg', 所以我加载opencv函数来加载它时遇到了麻烦。 我想像

一样加载它
cv.LoadImage('image0.jpg')

2 个答案:

答案 0 :(得分:1)

如果您的文件包含文件的完全限定名称。您可以执行以下操作

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:
    ...

答案 1 :(得分:0)

尝试使用

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

如果您的文件位于其他目录中,

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