cv2.imread 适用于一个文件,但在迭代 os.listdir() 时无效
cv2.imread works with one file but not when iterating os.listdir()
我尝试使用 cv.imread()
函数将几张图像导入 opencv。
我认为我给出 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']
这样的输出,这对我来说似乎很好:它是一个字符串列表。
我在这里做错了什么,为什么这个字符串没有像打印给我一样传递给我?
问题是 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)
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")]
我尝试使用 cv.imread()
函数将几张图像导入 opencv。
我认为我给出 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']
这样的输出,这对我来说似乎很好:它是一个字符串列表。
我在这里做错了什么,为什么这个字符串没有像打印给我一样传递给我?
问题是 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)
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")]