Python调用OpenCV报错module 'cv2' has no attribute 'videoCapture'
问题说明
Python开发OpenCV视频读取功能时触发报错:AttributeError: module 'cv2' has no attribute 'videoCapture',已将pip更新至最新版本问题仍存在,原实现代码如下:
import cv2 as cv capture = cv.videoCapture('videos/cat1.mp4') while True: isTrue, frame = capture.read() cv.imshow('video', frame) if cv.waitKey(20) & 0*FF == ord('d'): break capture.relase() cv.destroyAllWindos()
问题根因
代码中存在多处OpenCV API拼写、语法错误,是触发报错的核心原因:
- OpenCV官方API采用大驼峰命名规则,视频捕获类的正确名称为
VideoCapture,原代码中videoCapture首字母小写,直接触发本次属性不存在的报错 - 按键判断逻辑的十六进制标识书写错误,正确写法为
0xFF,原代码误写为0*FF(将十六进制标记x错写为乘号*) - 视频资源释放方法名拼写错误,正确写法为
release(),原代码误写为relase()(漏写字母e) - 窗口销毁方法名拼写错误,正确写法为
destroyAllWindows(),原代码误写为destroyAllWindos()(字母顺序写反) - 若修正所有拼写问题后仍存在属性报错,是因为安装了与官方OpenCV重名的冲突第三方包,需要清理环境后重装官方包。
修复方案
- 先执行命令清理冲突包、安装官方OpenCV依赖:
pip uninstall -y cv2 opencv-python pip install opencv-python
- 将代码中所有API拼写错误修正,补充视频读取为空时的退出判断(避免视频播放结束后触发空帧报错),修正后完整可运行代码如下:
import cv2 as cv capture = cv.VideoCapture('videos/cat1.mp4') while True: isTrue, frame = capture.read() # 视频读取到末尾/文件路径错误时直接退出循环 if not isTrue: break cv.imshow('video', frame) if cv.waitKey(20) & 0xFF == ord('d'): break capture.release() cv.destroyAllWindows()
内容的提问来源于stack exchange,提问作者Fahim Iqbal
相关产品推荐
相关产品推荐

