OpenCV 无法读取图片:诊断及处理方法

解决openCV图片读取相关报错

问题描述

使用python 3.6 openCV 4.4 时,cv2.cvtColor()报错:

1
2
3
cv2.error: OpenCV(4.4.0)
C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-jmqlme5z\opencv\modules\imgproc\src\color.cpp:182:
error: (-215:Assertion failed) !_src.empty() in function 'cv::cvtColor'

以及cv2.imshow()报错:

1
2
cv2.error: C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:325: 
error: (-215) size.width>0 && size.height>0 in function cv::imshow

诊断

使用cv2.imread()读取图片后,print(读取的图片),观察输出结果是否为”None”。如果为”None”,说明图片根本就没读进去。需要注意的是imread没有读到图片,也不会报错。但是后续图片处理就会报错。

处理方法

发现了问题是由图片读取失败导致,那就好解决了。可以按照以下步骤:

  1. 检查路径是否出错。需要注意以下两种情况:
    1. 路径中有中文->方案A;
    2. 路径中有“\”->方案B;
  2. 检查图片是否存在。
    1. 若不存在图片,则…;
    2. 图片名包括中文->方案A;

解决方案A:

要注意,路径或图片名有中文时是不可以直接用imread的哦。可以使用以下函数:

1
2
3
def cv_imread(file_path):
cv_img = cv2.imdecode(np.fromfile(file_path,dtype=np.uint8),-1)
return cv_img

代码来自:https://www.zhihu.com/question/67157462/answer/251754530

解决方案B:

如果代码中的路径有“\”,可能会被识别为逃逸符,建议改成“\”。