2017-02-19 155 views
0

我想通过目录中的不同图像文件。我使用Jupyter来运行我的Python代码。但是我不断收到这个错误。以下是我的代码和我收到的错误。在目录中读取JPG文件?

CODE:

import os 
import os.path 
for img in os.listdir('test_images'): 
    if img.endswith("jpg"): 
     scriptpath = os.path.dirname(img) 
     print(os.path.join('test_images', img)) 
     # Read in the image 
     image = os.path.join(scriptpath, img) 
     image = mpimg.imread(image) 
     # Grab the x and y size and make a copy of the image 
     ysize = image.shape[0] 
     xsize = image.shape[1] 
     color_select = np.copy(image) 
     # Define color selection criteria 
     red_threshold = 200 
     green_threshold = 200 
     blue_threshold = 200 

     rgb_threshold = [red_threshold, green_threshold, blue_threshold] 

     # Do a boolean or with the "|" character to identify 
     # pixels below the thresholds 
     thresholds = (image[:,:,0] < rgb_threshold[0]) \ 
        | (image[:,:,1] < rgb_threshold[1]) \ 
        | (image[:,:,2] < rgb_threshold[2]) 
     color_select[thresholds] = [red_threshold,green_threshold,blue_threshold] 
     plt.imshow(color_select) 
     # Display the image     
     plt.imshow(color_select) 
     continue 
    else: 
     continue 

OUTPUT:

test_images/solidWhiteCurve.jpg 

错误:

FileNotFoundError       Traceback (most recent call last) 
<ipython-input-3-6edf7c0860b7> in <module>() 
     7   # Read in the image 
     8   image = os.path.join(scriptpath, img) 
----> 9   image = mpimg.imread(image) 
    10   # Grab the x and y size and make a copy of the image 
    11   ysize = image.shape[0] 

/Users/steveburgos/anaconda/envs/carnd-term1/lib/python3.5/site-packages/matplotlib/image.py in imread(fname, format) 
    1225 
    1226  if ext not in handlers: 
-> 1227   im = pilread(fname) 
    1228   if im is None: 
    1229    raise ValueError('Only know how to handle extensions: %s; ' 

/Users/steveburgos/anaconda/envs/carnd-term1/lib/python3.5/site-packages/matplotlib/image.py in pilread(fname) 
    1203   except ImportError: 
    1204    return None 
-> 1205   with Image.open(fname) as image: 
    1206    return pil_to_array(image) 
    1207 

/Users/steveburgos/anaconda/envs/carnd-term1/lib/python3.5/site-packages/PIL/Image.py in open(fp, mode) 
    2310 
    2311  if filename: 
-> 2312   fp = builtins.open(filename, "rb") 
    2313 
    2314  try: 

FileNotFoundError: [Errno 2] No such file or directory: 'solidWhiteCurve.jpg' 
+1

'scriptpath'将始终为空字符串,因为'os.listdir'返回裸文件名。尝试打印'os.path.join(scriptpath,img)'(您打开的路径)而不是'os.path.join('test_images',img)'。 – unutbu

+0

@unutbu你真棒!这工作完美!非常感谢! –

+1

我建议使用['glob.glob'](https://docs.python.org/3/library/glob.html#glob.glob)并以'* .jpg'结尾的_pathname_参数。 – martineau

回答

2

你有一个路径不匹配你的代码,你的错误是清楚地显示出它(文件不找到)。当你这样做:

for img in os.listdir('test_images'): 

您列出当前目录中的test_images目录。该img将包含在file1.ext形式,file2.ext等为os.listdir()仅列出它的文件名和目录,所以当你打电话值:

scriptpath = os.path.dirname(img) 

你基本上是GES任何事情,因为没有按img” t包含任何路径信息。所以,最后,当你这样做:

image = os.path.join(scriptpath, img) 

你在技术上仅传递文件名作为scriptpath是空的。由于您的映像位于test_images子目录中,而不在您的工作目录中,因此您通常会找不到文件。

有多种方法可以解决这个问题,最简单的是只申报一个查找目录中的变量,并在需要的时候使用它,例如:

target_path = "test_images" 
# ... 
for img in os.listdir(target_path): 
# ... 
    image = os.path.join(target_path, img) 
0

在我看来,我更喜欢使用glob库来返回目录中的文件列表。 import glob print (glob.glob("/home/peter/pictures/*.png")

回报: ['/home/peter/pictures/pic1.png', '/home/peter/pictures/pic2.png', '/home/peter/pictures/pic3.png', ...ect]

如果你想继续你的方法,我相信你没有给予正确的路径的文件夹目录。 想一想,该程序如何知道test_images所在的位置。