Python初学者:需要目录帮助

时间:2017-12-17 12:42:32

标签: python opencv image-processing

我想在这里做的是我要创建一个列表'image_paths',其中包含所有.pgm文件的路径(我希望用作面部识别测试图像的3.pgm文件除外)程序)。对于除'3.pgm'以外的图像我想要叠加它们为此我使用了数据库'8.pgm'中的一张图片作为基本图像,我在其上应用了addWeighted()函数,该函数遍历每一个image_paths列表中的路径,并继续在base_image上添加每个图像。我在for循环中使用resize()来保持图像的大小相同。

我正在使用AT& T面部数据库,其格式为.pgm文件。我面临的问题是在代码路径中。我在哪里创建每个.pgm文件的路径列表。

import cv2 
import numpy as np
import os

path=['test/']

#Appends all paths of images in the list image_paths. **I am facing error in this line of code**
image_paths = [os.path.join(path, f) for f in os.listdir(path) if not f.endswith('2.pgm')]

#initializing a base_image over which other images will be superimposed
base_image=cv2.imread('8.jpg')

#resizing the base image so it matches the size of the database pics (113(rows),97(columns))
base_image=cv2.resize(base_image,(97,113))

#cv2.imshow('lol',base_image) //for testing purposes

for pics in image_paths:
    im=cv2.imread(os.path.expanduser(pics))
    base_image=cv2.addWeighted(base_image,0.5,im,0.5,0)
    base_image=cv2.resize(base_image(91,113))

cv2.imshow('compiledimg.jpg',imstack)

k = cv2.waitKey(0) & 0xFF
if k == 27:         
    cv2.destroyAllWindows()

elif k == ord('s'): 
    cv2.imwrite('compiledimg.jpg',imstack)
cv2.destroyAllWindows()

我面临的错误是:

image_paths = [os.path.join(path, f) for f in os.listdir(path) if not f.endswith('2.pgm')]
TypeError: coercing to Unicode: need string or buffer, list found

2 个答案:

答案 0 :(得分:1)

好吧,这是一个简单的语法问题。

行:

path=['test/']

将更改为:

path='test/'
谢谢quamrana。

答案 1 :(得分:0)

在定义path=['test/']时,python解释器认为您正在定义列表。但是,由于您并非如此,因此需要除去方括号并将path设为字符串。因此正确的语法应为path='test/'