在使用 OpenCV 的cv2.imread()读取本地图片时,我遇到了两个典型报错,本文梳理完整的报错原因和解决方案,帮新手避坑。

一、报错场景复现

示例代码(读取含中文的 Windows 路径图片):

python

运行

import cv2
# 读取含中文的本地图片
image = cv2.imread("D:\素材与程序代码\素材\例题图像\car.png")
cv2.imshow("car", image)
cv2.waitKey()
cv2.destroyAllWindows()

运行后触发两个核心报错:

  1. 语法警告:SyntaxWarning: invalid escape sequence '\c'
  2. 文件读取失败:[ WARN:0@0.026] global loadsave.cpp:278 cv::findDecoder imread_('D:\素材与程序代码\素材\例题图像\car.png'): can't open/read file: check file path/integrity
  3. 衍生报错(读取失败导致):cv2.error: (-215:Assertion failed) size.width>0 && size.height>0 in function 'cv::imshow'

二、报错 1:SyntaxWarning: invalid escape sequence '\c'

报错原因

Python 中反斜杠\转义字符(如\n代表换行、\t代表制表符),路径中的\c\car.png开头)并非合法转义序列,因此触发语法警告;更关键的是,转义解析会导致路径被错误识别,间接引发文件读取失败。

解决方案(3 种任选,推荐前两种)

表格

修复方式 示例代码 说明
双反斜杠\\ image = cv2.imread("D:\\素材与程序代码\\素材\\例题图像\\car.png") \\会被 Python 解析为单个\,规避转义问题
正斜杠/ image = cv2.imread("D:/素材与程序代码/素材/例题图像/car.png") 所有系统兼容,无需考虑转义,最推荐
原始字符串r image = cv2.imread(r"D:\素材与程序代码\素材\例题图像\car.png") r前缀后,Python 不解析任何转义字符

三、报错 2:can't open/read file(路径正确仍报错)

报错原因

修复转义问题后,路径语法已正确,但仍提示 “无法读取文件”—— 核心原因是:OpenCV 的cv2.imread()底层基于 C++ 实现,默认不支持中文路径 / 中文文件名(系统图片查看器能打开是因为自动处理了中文编码,而 OpenCV 未做适配)。

解决方案(2 种核心方案)

方案 1:修改路径为纯英文(一劳永逸)

将含中文的文件夹 / 文件名全部改为英文,彻底规避中文编码问题:

python

运行

import cv2
# 纯英文路径(示例)
image = cv2.imread("D:/sucaiyudaima/sucai/test/car.png")
if image is not None:
    cv2.imshow("car", image)
    cv2.waitKey()
    cv2.destroyAllWindows()
else:
    print("文件读取失败,请检查路径/文件完整性")
方案 2:绕过 OpenCV 中文路径限制(无需改路径)

通过 Python 读取文件二进制数据,再用cv2.imdecode()解码,兼容中文路径:

python

运行

import cv2
import numpy as np

# 含中文的原始路径
img_path = r"D:\素材与程序代码\素材\例题图像\car.png"

# 步骤1:读取文件二进制数据
with open(img_path, 'rb') as f:
    img_data = np.frombuffer(f.read(), np.uint8)
# 步骤2:解码为OpenCV可识别的图像格式
image = cv2.imdecode(img_data, cv2.IMREAD_COLOR)

# 显示图像
if image is not None:
    cv2.imshow("car", image)
    cv2.waitKey()
    cv2.destroyAllWindows()
else:
    print("文件损坏或路径错误")

四、总结

  1. SyntaxWarning是转义字符导致,只需将路径中的\改为/\\,或加r前缀即可修复;
  2. can't open/read file若路径正确仍报错,90% 是 OpenCV 不支持中文路径,优先改纯英文路径,或用cv2.imdecode()兼容中文;
  3. 新手建议:使用 OpenCV 时尽量避免中文路径,减少不必要的兼容问题。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐