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
相关产品推荐
相关产品推荐

