【问题标题】:Why are my path functions not returning any images为什么我的路径函数不返回任何图像
【发布时间】:2021-08-25 08:52:03
【问题描述】:

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

我尝试过一些路径变量。我已经尝试了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'

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

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

我已尝试使用此循环:

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'

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

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

【问题讨论】:

  • error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor',检查您是否可以在外部应用程序中打开此图像(例如,Windows 照片)
  • 我已经检查过了,我可以手动打开图像,也可以使用类似:path = r'C:\Users\Kays_\Documents\Exam_for_27\Dataset\Fixed point\Fixed_Point.jpg'read = cv2.imread(path)show = cv2.imshow('img', read)cv2.waitKey() 这仅适用于单个图像(对不起,我不知道如何在这里做代码块)@AcaNg
  • @Rekkus 您是否尝试过调试并从for filename in path2: 行查看filename 是什么?尝试在for filename in path2: 之后执行print(filename) 看看输出什么?
  • 我不知道该怎么做,@Xitiz

标签: python glob


【解决方案1】:

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

路径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 之后的逗号更改为反斜杠。

【讨论】:

  • 我发誓我已经试过了!当时肯定有其他问题,但这确实解决了我的问题,非常感谢!并感谢您对我的其他错误路径的解释。
【解决方案2】:

您不在Calibration_images 文件夹中,因此您无法从那里打开文件,要么使用os.chdir('Calibration_images') 将您的目录更改到那里,要么像PIL.Image.open('Calibration_images/'+filename) 一样打开

【讨论】:

  • 使用os.chdir('Calibration_images') 而不是os.listdir('Calibration_images') 允许我在两个循环中打开第一个图像,但是当我退出图像时,我得到一个错误代码。 TypeError: 'NoneType' object is not iterable
  • 顺便说一句,你怎么能看到我不在文件夹中?我不认为我完全理解您何时在文件夹中。项目文件夹里面有文件夹还不够吗?
  • 没有我所说的在列出后更改目录,它不会那样工作 os.listdir 只返回文件名它不返回具有相对目录的文件名,所以你必须附加文件目录名称后的名称 ('Calibration_images')
猜你喜欢
  • 1970-01-01
  • 2023-03-24
  • 2020-11-27
  • 2022-01-12
  • 1970-01-01
  • 2019-10-12
  • 2021-07-30
  • 2020-09-28
相关资源
最近更新 更多