【问题标题】:Importing a folder of images using Scikit io module使用 Scikit io 模块导入图像文件夹
【发布时间】:2021-07-20 21:13:07
【问题描述】:

我正在尝试使用 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', '010.png', '0101.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. 创建后打印 listFiles
  4. 将 +name 添加到首先定义 listFiles 的行尾
  5. 导入 numpy 和 matplotlib 以防有任何依赖关系。

【问题讨论】:

    标签: python scikit-learn scikit-image


    【解决方案1】:

    使用 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)
    

    【讨论】:

      【解决方案2】:

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

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

      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)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-26
        • 2019-09-16
        • 2012-02-15
        相关资源
        最近更新 更多