使用 opencv 读取图片时可能遇到报错信息如下:

cv2.error: OpenCV(4.5.4-dev) D:\a\opencv-python\opencv-python\opencv\modules\imgproc\src\color.cpp:1

这种问题大概率是文件路径出问题了。
PS:报错原因尚未查阅过官网,以下分析仅由试验得出。

可能原因以及解决方法:

图片路径中存在中文:

这个只需要检查一下路径并更改就行了。

建议文件,文件夹的命名规范和 python 的命名规范一直。

文件(图片)存在问题

文件名错误
filename的文件包括文件扩展名,应该是类似于flower.jpgflower.png 的形式,而非单纯的flower

IDE的配置:
假如你的代码是迁移过来的,很可能因为你使用的和本来代码的IDE 不同而出现这样的问题。

Jupyter notebook
如果使用的是 Jupyter notebook。Jupyter notebook 的文件读取路径是默认从代码所在的文件夹作为根目录的。
简言之,就是代码和图片在同一个目录,你可以使用cv.imread(‘flower.jpg’) 。
假如代码和「img」文件夹在同一目录,即这种形式:

├─opencv_learn.py
├─img
│  ├─flower.jpg

你需要这样写:cv.imread("img/flower.jpg")

VScode
VScode 的文件读取路径一般是从当前的工作区(资源管理器的一级文件夹)开始作为根目录。也就是你创建(打开)的文件夹。

比如下图:演示
此时打开的是序号为「1」的文件夹,代码是序号「3」中的文件,cv2.imread("test.jpg",1) 读取的路径是单纯的图片名,那应该从序号「1」的文件夹中进行寻找,而一级文件夹下是找不到 test.jpg 该文件的,因此会报错。

如果你打开的文件夹(也就是一级文件夹)更换为序号「3」所在的文件夹 ——「code_001」,那么你运行代码大概率是没有问题的。VScode会从此时打开的文件夹(也就是code_001)中进行寻找。

在VScode 中,如果你迁移过来的代码读取方式都是单纯的图片名cv.imread("flower.jpg") 这种形式的,或者我们喜欢使用这样的读取方式,但更想将代码分类存放成多级目录。我们可以进行简单的设置:

  1. 点击运行 => 打开配置(没有的话点击添加配置在这里插入图片描述
  2. 这时会在 .vscode 文件夹中新增出 launch.json 的文件,我们可以添加一个cwd参数配置,如下复制粘贴即可:
"cwd": "${fileDirname}"

在这里插入图片描述

注意上一行末尾,加上逗号 ,

这样的配置意味着,你需要像在 Jupyter notebook 中那样写代码,即:你的代码中的要读取的文件是和你当前代码同一文件夹下的。
你的代码几乎将不能写成 cv2.imread(./python/code_001/test.jpg",1) ,因为此时你已经配置你的代码所在文件夹作为根目录了。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐