微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 Scikit io 模块导入图像文件夹

如何解决使用 Scikit io 模块导入图像文件夹

我正在尝试使用 scikit 图像包学习图像处理。我知道我最终需要导入包含大量图像的文件夹。我首先单独指定每个文件的路径,这工作正常,我能够生成我希望的数组。

import numpy as np
import matplotlib as plt
from skimage import io
from skimage import viewer
fID1 = 'C:/Users/keand/Documents/STrader Lab/HJ pictures/PictureB.jpg'
fID2 = 'C:/Users/keand/Documents/STrader Lab/HJ pictures/PictureA.jpg'
root1 = io.imread(fID1)
root2 = io.imread(fID2)

然后我尝试使用 scikit 文档中的示例来加载文件夹。

>>> import os
>>> from natsort import natsorted,ns
>>> from skimage import io
>>> list_files = os.listdir('.')
>>> list_files
['01.png','010.png','0101.png','0190.png','02.png']
>>> list_files = natsorted(list_files)
>>> list_files
['01.png','02.png','0190.png']
>>> image_list = []
>>> for filename in list_files:
...   image_list.append(io.imread(filename))

这是我的消遣:

import os
from natsort import natsorted,ns
from skimage import io
from skimage.io import imread
listFiles = os.listdir('C:/Users/keand/Documents/STrader Lab/HJ pictures')
# listFiles = os.listdir('./HJ pictures')
print(listFiles)
listFiles = natsorted(listFiles)
print(listFiles)
imageList = []
for filename in listFiles:
    imageList.append(io.imread(filename))

当我运行它时,我得到以下信息:

runfile('C:/Users/keand/Documents/STrader Lab/ImageProcessing.py',wdir='C:/Users/keand/Documents/STrader Lab')
['PictureA.jpg','PictureB.jpg']
['PictureA.jpg','PictureB.jpg']
Traceback (most recent call last):

  File "C:\Users\keand\Documents\STrader Lab\ImageProcessing.py",line 31,in <module>
    imageList.append(io.imread(filename))

  File "C:\Users\keand\anaconda3\lib\site-packages\skimage\io\_io.py",line 48,in imread
    img = call_plugin('imread',fname,plugin=plugin,**plugin_args)

  File "C:\Users\keand\anaconda3\lib\site-packages\skimage\io\manage_plugins.py",line 207,in call_plugin
    return func(*args,**kwargs)

  File "C:\Users\keand\anaconda3\lib\site-packages\skimage\io\_plugins\imageio_plugin.py",line 10,in imread
    return np.asarray(imageio_imread(*args,**kwargs))

  File "C:\Users\keand\anaconda3\lib\site-packages\imageio\core\functions.py",line 265,in imread
    reader = read(uri,format,"i",**kwargs)

  File "C:\Users\keand\anaconda3\lib\site-packages\imageio\core\functions.py",line 172,in get_reader
    request = Request(uri,"r" + mode,**kwargs)

  File "C:\Users\keand\anaconda3\lib\site-packages\imageio\core\request.py",line 124,in __init__
    self._parse_uri(uri)

  File "C:\Users\keand\anaconda3\lib\site-packages\imageio\core\request.py",line 260,in _parse_uri
    raise FileNotFoundError("No such file: '%s'" % fn)

FileNotFoundError: No such file: 'C:\Users\keand\Documents\STrader Lab\PictureA.jpg'

有人可以帮我弄清楚为什么我在识别图像名称时收到 FileNoFoundError 吗?

以下是我尝试过的一些故障排除步骤。

  1. 重命名文件
  2. 确保python脚本和文件在同一个目录
  3. 创建后打印列表文件
  4. 将 +name 添加到首先定义 listFiles 的行尾
  5. 导入 numpy 和 matplotlib,以防存在任何依赖项。

解决方法

使用io模块的io.imread_collection函数要方便很多。这将创建一个存储为 nd 数组的图像集合。

from skimage.io import imread
from skimage.io import imread_collection
dirName = 'C:/Users/keand/Documents/Strader_Lab/Image_Processing/HJ_Pictures/*.jpg'
collection = imread_collection(dirName)
,

检查错误信息,您尝试加载的文件路径不存在。

图像不在您的工作目录中。您必须通过文件路径而不是文件名加载它们。

import os
scr = 'C:/Users/keand/Documents/Strader Lab/HJ pictures'
listFiles = [os.path.join(src,f) for f in os.listdir(src)]
print(listFiles)

我更喜欢使用 pathlib 库:

from pathlib import Path 
scr = Path('C:/Users/keand/Documents/Strader Lab/HJ pictures')
listFiles = [f.resolve() for f in src.glob("*.jpg")]
print(listFiles)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。