我尝试用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")]