import PIL.Image as pilimg
import numpy as np
# Read image
im = pilimg.open("../dataset/start.jpg")
# Display image
im.show()
# Fetch image pixel data to numpy array
pix = np.array(im)
(我不是数据集的作者,所以我无法上传整个项目文件。)
我正在尝试使用 Pillow 读取图像并将其转换为 NumPy 数组。但是,我尝试了几种方法,例如使用绝对路径和 PIL image.open() 中的方法适用于某些图像,但不适用于其他图像,除了使用 OpenCV 的方法。但是,它总是导致 FileNotFound。
start.jpg
的绝对路径是F:\GIST 강의 자료\2021 1학기\EC3202 신호 및 시스템\Programming Assignment\dataset\start.jpg
。我相信从 start.jpg
到 src/program.py
的相对路径是 ../dataset/start.jpg
。
我正在使用 conda 4.10.1 和 python 3.8.8 以及 windows 10。
路径是相对于当前工作目录的。 如果您不确定 cwd 是什么,您可以通过执行以下操作找到它:
print(f"Current working dir: {os.getcwd()})
然后您可以使用
os.path.join
从那里连接您的相对路径
os.path.join(os.getcwd(),'dataset/start.jpg')
不要依赖 os.getcwd 作为相对路径。原因如下所示。
请使用
pathlib.Path
。即考虑这些结构。
x:/
├ A
┃ ├ 1.png
┃ ├ 2.png
┃ ├ 3.png
┃ ├ 4.png
┃ └ 5.png
┃
└ B
└ script.py
如果您想从 script.py
到
1.png可靠地访问 ,您最好使用
__file__
来确定脚本的路径 - 因为当前工作目录可能与实际脚本位置不同,如下例所示输出。
import pathlib
import os
print("Current cwd: ", os.getcwd())
# Get current script's folder
script_location = pathlib.Path(__file__).parent
# get data folder
data_location = script_location.parent / "A"
# single file example
png_file = data_location / "1.png"
# alternatively can iterate thru directory
for file_ in data_location.iterdir():
# print full path in linux style
print(f"{file_.absolute().as_posix()}")
(Accessing file in different path in absolute path)
jupiterbjy@NYARUDESK/D: py X:\B\script.py
Current cwd: D:\
X:/A/1.png
X:/A/2.png
X:/A/3.png
X:/A/4.png
X:/A/5.png
(Change directory)
jupiterbjy@NYARUDESK/D:
❯ cd x:
(Now use indirect path)
jupiterbjy@NYARUDESK/X: py .\B\script.py
Current cwd: X:\
X:/A/1.png
X:/A/2.png
X:/A/3.png
X:/A/4.png
X:/A/5.png
查看 cwd - 当前工作目录 - 每次运行的 os.getcwd
有何不同。但是,无论您在何处间接或直接访问该脚本,在文件夹
B 外部或内部,您都可以使用 __file__
对象的
.parent
、
.joinpath
和
pathlib.Path
方法相对可靠地访问文件。查看
pathlib
Image.open(f'{os.getcwd()}/{project-name}/{image-file-name}.{file-extension}')
有关更多详细信息,请参阅 方法来了解库如何处理文件访问。