为什么我的路径函数不返回任何图像

Why are my path functions not returning any images

我想从一个文件夹中加载一些图像并一张一张地查看它们,但是使用一种方法我收到一条错误消息,而另一种方法虽然没有错误,但根本无法打开图像,而最后一种方法只是returns 一个空列表。

我尝试了一些路径变量。我已经尝试了 path1 中显示的工作目录和 pathGlob 中显示的另一个目录。我已经尝试了所有变体,但我在不同的路径中使用这两种变体来向您展示以防万一这很重要。

path1 = r'C:\Users\Kays_\PycharmProjects\CompVisionExam\Calibration_images'
path2 = os.listdir('Calibration_images')
pathGlob = glob.glob(r'C:\Users\Kays_\Documents\Exam_for_27\Dataset\Calibration_images,*.jpg')

我将 3 个粘贴的文件夹复制到我的工作目录中(并在另一个位置尝试这两个目录),我正尝试使用 os.listdir 调用它们,如下所示。

path2 = os.listdir('Calibration_images')
image_list = []
for filename in path2:
    im = PIL.Image.open(filename)
    image_list.append(im)
print(image_list)

这将返回此错误消息:

C:\Users\kays_\PycharmProjects\CompVisionExam\venv\Scripts\python.exe
C:/Users/kays_/PycharmProjects/CompVisionExam/main.py
Traceback (most recent call last):
File "C:/Users/kays_/PycharmProjects/CompVisionExam/main.py", line 41, in <module>
im = PIL.Image.open(filename)
File "C:\Users\kays_\PycharmProjects\CompVisionExam\venv\lib\site-packages\PIL\Image.py", line 2968, in open
fp = builtins.open(filename, "rb")
FileNotFoundError: [Errno 2] No such file or directory: 'cali (1).jpg'

path1path2(在两个目录选项中)都会出现此错误,但是对于 path1,它指出:

FileNotFoundError: [Errno 2] No such file or directory: 'C'

对我来说,这意味着图像的位置是正确的,即使它另有说明,因为我没有给出文件的名称,而是工作目录中的文件夹,returns 第一个文件夹的名称图像在循环中迭代,但仍然无济于事。

当我在这个循环中使用 pathGlob 时,它 returns 一个空列表 []

我试过使用这个循环来代替:

path2 = os.listdir('Calibration_images')
for image in image_list:
print(image)
img = cv2.imread(image)
cv2.imshow('img', img)
cv2.waitKey(1000)

此过程以 exit code 0 结束,但不会打开 pathGlob 的任何图像。代码 运行 也没有足够长的时间来打开但不显示图像,所以我也不确定这里有什么问题!当我使用 path1path2 时,我收到此错误消息:

C:\Users\kays_\PycharmProjects\CompVisionExam\venv\Scripts\python.exe C:/Users/kays_/PycharmProjects/CompVisionExam/main.py
cali (1).jpg
Traceback (most recent call last):
File "C:/Users/kays_/PycharmProjects/CompVisionExam/main.py", line 26, in <module>
cv2.imshow('img', img)
cv2.error: OpenCV(4.5.3) C:\Users\runneradmin\AppData\Local\Temp\pip-req-build-q3d_8t8e\opencv\modules\imgproc\src\color.cpp:182: error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

我之前在另一个脚本中看到过此错误消息,并通过正确创建我的路径变量解决了这个问题,这次我似乎无法做到这一点。

我在网站上和随机谷歌搜索中寻求其他问题的帮助,但无济于事。

您不在 Calibration_images 文件夹中,因此您无法从那里打开文件,请使用 os.chdir('Calibration_images') 将您的目录更改到那里,或者像 PIL.Image.open('Calibration_images/'+filename)[=13 这样打开=]

这里有一些问题。我将逐一介绍。

路径 1

对于 path1,您试图遍历目录 r'C:\Users\Kays_\PycharmProjects\CompVisionExam\Calibration_images' 中的所有文件,但实际上您正在做的是遍历 path1 字符串中的每个字符。为了演示,请考虑以下代码:

path = r"C:\foo.txt"
for c in path:
    print(c)

这将打印以下内容:

C
:
\
f
o
o
.
t
x
t

路径 2

这里的问题是 os.listdir 列出了目录中所有文件的名称,但这不足以打开文件。要打开它们,您需要路径,而不仅仅是文件名。

要用绝对路径做到这一点,你可以这样做:

base_dir = r'C:\Users\Kays_\PycharmProjects\CompVisionExam\Calibration_images'
image_list = []
for filename in os.listdir(base_dir):
    path = os.path.join(base_dir, filename)
    image = PIL.Image.open(filename)
    image_list.append(image)

你可以用相对路径做同样的事情,但你需要注意你当前的目录是什么。

base_dir = r'Calibration_images'
image_list = []
for filename in os.listdir(base_dir):
    path = os.path.join(base_dir, filename)
    image = PIL.Image.open(filename)
    image_list.append(image)

如果您 运行 来自 C:\Users\Kays_\PycharmProjects\CompVisionExam\ 文件夹而不是其他文件夹,则此代码将有效。

pathGlob

你离这里很近了。阻止您获得正确结果的所有原因是输入路径中的错误。试试这个。

pathGlob = glob.glob(r'C:\Users\Kays_\Documents\Exam_for_27\Dataset\Calibration_images\*.jpg')
image_list = []
for path in pathGlob:
    image = PIL.Image.open(filename)
    image_list.append(image)

请注意,我已将 Calibration_images 后的逗号更改为反斜杠。