代码之家  ›  专栏  ›  技术社区  ›  r01_mage

cv2.imread只处理一个文件,但在迭代os.listdir()时不起作用

  •  0
  • r01_mage  · 技术社区  · 4 年前

    cv.imread() 我想我给你的路有问题 imread() .

    使用一个文件就可以了:

    cv.imread('data/img.png')
    

    但在for循环中:

    imgs = os.listdir('./data')
    targets = []
    for img in imgs:
        target = cv.imread(img)
        targets.append(target)
    

    我一直得到一个满是None值的数组,这意味着opencv没有加载文件。

    print(img) 给我一个像这样的输出 ['btn1.png','btn2.png','btn3.png'] 这对我来说很好:这是一个字符串列表。

    我在这里做错了什么,为什么这个字符串在打印给我时没有被传递?

    2 回复  |  直到 4 年前
        1
  •  0
  •   tdelaney    4 年前

    os.listdir 提供文件名,而不是其路径。您需要重新添加路径,或者使用包含该路径的其他API。 glob.glob(os.path.join("path", "*.png")) 我会的。但你也可以使用 pathlib

    from pathlib import Path
    targets = [cv.imread(path) for path in Path("data").glob("*.png")]
    
        2
  •  -1
  •   Unknown N    4 年前

    问题是imgs包含图像的文件名,但它们不是完整的文件路径,因此您的程序无法找到您的图像文件。

    尝试将您的程序修复为类似

    root_dir = './data'
    imgs = [os.path.join(root_dir, f) for f in os.listdir(root_dir)]
    targets = []
    for img in imgs:
        target = cv2.imread(img)
        targets.append(target)