解决Python cv2.imread读取中文路径返回None及图片格式问题

何川
何川
发布时间:2026-10-13| 3人浏览过
原创

本文详细解析Python中使用OpenCV的cv2.imread读取图片返回None的常见原因。重点介绍通过np.fromfile结合cv2.imdecode处理中文路径的标准方法,并补充因文件头与后缀不匹配(如GIF改后缀为JPG)导致的读取失败排查思路,提供使用PIL进行格式转换的实用代码示例。

cv2.imread读取图片返回None的原因分析

在使用cv2读取图片时,若尝试获取图片形状大小报错“'NoneType' object has no attribute shape”,经排查发现cv2.imread返回值为None,这表明图片并未被成功读取。

下图展示了问题解决后的正常代码示例,用于直观展示正确的因果关系;在实际排查错误时,逻辑推导通常是从结果向上追溯至原因。

尝试使用PIL库读取图像,结果显示图片能够成功加载。通过PIL可以获取图片的尺寸和格式信息,具体代码如下:

OpenCV处理中文路径的标准解决方案

cv.imread函数可以成功读取非中文路径的图片,因此推测问题可能出在中文路径上。由于OpenCV默认不接受非ASCII字符路径,解决方法是先用np.fromfile()将文件读取为np.uint8格式,再使用cv2.imdecode()进行解码,实现如下:

np.fromfile(filename, dtype)用于以指定的dtype类型读取文件内容。

cv2.imdecode()函数从指定的内存缓存中读取数据,并将其转换(解码)为图像格式;该函数主要用于从网络传输数据中恢复出图像。

图片格式与后缀不匹配导致的读取失败排查

补充知识:Python 3.x环境下,cv2.imread()导入图片失败返回None的情况分析。

首次运行时,命令行中出现的错误提示如下:

ValueError: embedded null character

经发现,导入的图片路径中存在\0字符,导致读取失败。

Python 3.x环境下,cv2.imread()导入图片失败且返回None的另一种情况。

首先确认路径中不包含中文名称。

检查pip list列表,确认已安装opencv-python(尽管可能重新安装过)。

然而,这些图片在使用PS打开时会报错:无法完成请求,因为找到不知名的或无效的JPEG标识符类型。

图片是从网站上爬取下来的,修改了其后缀名为jpg,但源图真正的后缀名实际上是gif。

因此,需要重置部分文件的格式,例如使用画图工具重新保存为jpg格式。

这里需要注意:

文件后缀只是一个标签,用于表明文件的类型和格式,但文件实际内容是否符合该格式则是另一回事。有时修改后缀名后文件仍能打开(如我遇到的情况),是因为某些应用程序会根据文件头中的信息来判断格式(例如Windows自带的照片查看器),而非仅依赖后缀名。因此,切实有效的方式是通过格式转换软件进行真正的格式转换。

使用PIL进行彻底格式转换的方法

应用Python PIL包的Image模块将图片重新转换为jpg格式(实现彻底转换,而非仅修改后缀)。

(当然,如果只需处理几张图片,直接使用画图工具打开并另存为jpg格式即可)。

img = Image.open(file_path+'/'+files[j]).convert('RGB') img.save(file_path+'/'+files[j]

注意代码中必须包含convert('RGB'),否则可能会报错:OSError: cannot write mode P as JPEG。

以上关于解决Python cv2.imread读取中文路径图片返回None的问题及格式转换技巧的全部内容,希望能给大家提供参考,也希望大家多多支持本站。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。