You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

OpenCV read函数报(-5:Bad argument)错误,求修复方案

修复OpenCV read函数报错的解决方案

错误原因

你代码里的核心问题是误用了cv2.VideoCapture.read()方法:

  • cv2.VideoCapture(0)是用来调用电脑摄像头的,它的read()方法不需要传入任何参数,作用是从摄像头捕获一帧画面。
  • 如果你想读取本地图片文件,应该用cv2.imread()函数,而不是摄像头对象的read()方法。

你的代码里给cap.read()传了图片路径,这完全不符合该方法的参数要求,所以触发了"Bad argument"错误,提示参数不是预期的numpy数组或Ptr<cv::UMat>类型。

两种修复方案

方案1:读取本地图片(如果你原本想加载本地图片)

把摄像头相关代码替换成cv2.imread(),代码修改如下:

import cv2
import matplotlib.pyplot as plt

# 用cv2.imread读取本地图片
img = cv2.imread('/Example/photo.jpg')
# cv2.imread默认读入BGR格式,转成RGB适配matplotlib显示
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

fig, ax = plt.subplots(figsize=(10, 10))
ax.axis('off')
plt.imshow(img)
plt.show()

注意:如果你的图片是带透明通道的BGRA格式,再改用cv2.COLOR_BGRA2RGBA进行转换;普通RGB图片用COLOR_BGR2RGB即可。

方案2:从摄像头捕获画面(如果你原本想用摄像头)

如果你的需求是调用摄像头捕获画面,去掉read()的参数即可,代码修改如下:

import cv2
import matplotlib.pyplot as plt

cap = cv2.VideoCapture(0)
# 摄像头的read()无需传参,返回捕获状态(res)和帧数据(img)
res, img = cap.read()
if not res:
    print("无法从摄像头捕获画面")
    cap.release()
    exit()

# 转成RGB格式适配matplotlib显示
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)

fig, ax = plt.subplots(figsize=(10, 10))
ax.axis('off')
plt.imshow(img)
plt.show()

# 释放摄像头资源
cap.release()

额外注意事项

  • 调用摄像头后务必用cap.release()释放资源,避免设备被占用。
  • 如果cv2.imread()返回None,检查图片路径是否正确(绝对路径要确保文件存在,相对路径要和脚本位置匹配)。

内容的提问来源于stack exchange,提问作者Michael

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 01:27:10