python cv2.Videocapture() 不起作用,cap.isOpened() 返回 false
Posted
技术标签:
【中文标题】python cv2.Videocapture() 不起作用,cap.isOpened() 返回 false【英文标题】:python cv2.Videocapture() does not work, cap.isOpened() returns false 【发布时间】:2017-07-01 20:11:36 【问题描述】:cv2.Videocapture() 在使用网络摄像头时工作正常,但在尝试从硬盘读取时显示错误 cap.isOpened() 返回 false
import cv2
import numpy as np
background=cv2.imread('background.png')
cap = cv2.VideoCapture('car video.mp4')
cap.open('car video.mp4')
print cap.isOpened()
while 1:
ret,img=cap.read()
cv2.imshow('a',img)
print img.shape
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()
显示这个错误
cv2.imshow('a',img)
error: ..\..\..\..\opencv\modules\highgui\src\window.cpp:266: error: (-215) size.width>0 && size.height>0 in function cv::imshow
我的opencv版本3.0.0,python 2.7,windows10 32位
【问题讨论】:
首先,移除 cap.open() 调用;这是多余的。其次,检查您的视频是否与您的代码位于同一目录中。第三,删除其文件名中的空格。试试 car_video.mp4 我更改文件名并删除 cap.open() 。但错误信息保持不变 用双引号将文件名括起来 此链接对我有很大帮助并解决了我的问题。 ***.com/questions/23119413/… 【参考方案1】:您需要 ffmpeg 编解码器才能读取视频。
【讨论】:
是的,谢谢。一开始我没有复制ffmpeg编解码文件 你能告诉我如何添加ffmpeg编解码器文件吗? 将所有文件从 *OpenCV\3rdparty\ffmpeg* 复制到 *C:\Python27* 或 PATH 中的目录.可能还需要重命名 opencv_ffmpeg.dll 文件。对于 OpenCV 版本 X.Y.Z opencv_ffmpeg.dll ==> opencv_ffmpegXYZ.dll 对于 64 位 OpenCV 版本 X.Y.Z opencv_ffmpeg.dll ==> opencv_ffmpegXYZ_64.dll 我正在使用 opencv 3.0.0 和 win 32 所以重命名文件就像这个 opencv_ffmpeg300.dll【参考方案2】:我在 anaconda3 虚拟环境中使用 opencv 时遇到了同样的错误。 我检查了当前 opencv 版本的构建信息,ffmpeg 被标记为 "no"。
解决这个问题
-
我从我的 conda 环境中卸载了 opencv (conda uninstall opencv)
使用 conda-forge 频道安装了最新的 ffmpeg (conda install -c conda-forge ffmpeg)
命名版本构建频道
ffmpeg 4.0.2 ha6a6e2b_0 conda-forge
然后使用 conda-forge 通道再次安装 opencv (conda install -c conda-forge opencv)
命名版本构建频道
opencv 3.4.1 py36_blas_openblash829a850_201 [blas_openblas] conda-forge
执行此操作后重新启动 python 控制台并导入 cv2。
【讨论】:
查看构建信息:python -c "import cv2; print(cv2.getBuildInformation())"
【参考方案3】:
试试
pip install opencv-contrib-python
它对我有用
【讨论】:
【参考方案4】:我不确定您的文件名是否正确。我从未见过像 'car video.mp4' 这样的文件目录。当您使用基于零的索引时,您的网络摄像头和 cv2.VideoCapture 工作正常;但是 VideoCapture 无法读取像 'car(space)video.mp4' 这样的文件,工作代码是这样的;
import numpy as np
import cv2
cap = cv2.VideoCapture('video.mp4')
while(cap.isOpened()):
ret, frame = cap.read()
if ret==True:
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
else:
break
# Release everything if job is finished
cap.release()
cv2.destroyAllWindows()
【讨论】:
以上是关于python cv2.Videocapture() 不起作用,cap.isOpened() 返回 false的主要内容,如果未能解决你的问题,请参考以下文章
OpenCV(Python中的cv2)VideoCapture在删除后不释放相机
python cv2.videocapture打不开怎么回事
Facecam 视频无法使用 cv2.VideoCapture() 打开并且无法读取