树莓派运行OpenCV代码报cvGetMat不支持数组类型错误如何解决
问题排查步骤
- 第一步验证图片是否实际读取成功:在
cv2.imread后加一行打印代码print(img is None, type(img)),如果输出为True <class 'NoneType'>,说明图片读取失败,你认为路径正确大概率是误解:相对路径./images/image.jpg是相对于脚本运行时的工作目录,而非脚本本身存放的目录,你可以替换为图片的绝对路径重试。 - 第二步排查图片本身问题:如果确认img不是None,先替换为其他正常的jpg/png格式测试图片重试,排除原图片损坏、后缀名与实际格式不符、是OpenCV 4.5.3不支持的格式(如webp、heic等)的问题。
- 第三步验证依赖兼容性:树莓派架构下预编译的opencv-python包经常出现和numpy版本不匹配的问题,可先执行卸载命令
pip uninstall -y opencv-python opencv-python-headless numpy,再重新安装对应版本pip install numpy==1.21.2 opencv-python==4.5.3.56,保证版本匹配。 - 第四步排查运行环境问题:
cv2.imshow依赖图形桌面环境,如果你是通过SSH远程登录树莓派无桌面运行脚本,会触发该类报错,这种场景可删除imshow相关代码,改为用cv2.imwrite('./test.jpg', img)保存图片验证读取是否正常。 - 第五步排查权限问题:验证运行脚本的用户是否拥有图片的读取权限,可添加代码验证:
import os print(os.access('./images/image.jpg', os.R_OK))
如果返回False,修改对应目录和文件的读取权限即可。
内容的提问来源于stack exchange,提问作者user16257123
相关产品推荐
相关产品推荐

