类似于OpenCV 2.4 VideoCapture not working on Windows
结果是一个带有灰色图像的窗口约2秒钟,然后关闭并显示“视频结尾
import cv2
import imutils
vidPath = "filename.mp4"
video = cv2.VideoCapture(vidPath)
index = 0;
while True:
print (index)
index += 1
ret, frame = video.read()
if ret == False:
print("End of video")
break
frame = imutils.resize(frame, width = 500)
cv2.imshow("Video", frame)
video.release()
cv2.destroyAllWindows()
'ret'总是在索引打印达到大约900后返回false,根本没有任何有用的显示在窗口上。该视频大约长2分钟。
Windows 10,Python 3.5版,OpenCV 3.4.3版(contrib)通过安装
pip install opencv-contrib-python
我检查了cv2.getBuildInformation(),FFMpeg是(预编译的二进制文件)
我已将opencv_ffmpeg313.dll复制到python (user/AppData/Local/Programs/Python/Python35-32/Scripts) and (user/AppData/Local/Programs/Python/Python35-32)
的路径中
我还制作了名为opencv_ffmpeg313_64.dll的副本,以防万一
我还尝试了几种不同的视频,包括多个.mp4,.avi等。 我已经用尽了解决此问题的所有修补程序,但仍然可以解决该问题。
答案 0 :(得分:0)
对不起,我没有注意到您问题的所有详细信息...
问题是您在使用imshow
函数之后失踪了:
cv2.waitKey(10)
其中10是等待的毫秒数。 waitKey函数不仅检查键盘事件并返回按下的键,还刷新您在其中显示图像的窗口(如果有多个,则刷新所有窗口)。它类似于某些GUI库中的spin函数...
这说明了为什么窗口是灰色的。在某个时候,它将结束读取视频并退出(900帧以后)。 30 fps视频中的900帧仅需30秒...如果持续2分钟左右,则可能是7.5 fps ...否则帧可能有问题。要对此进行检查,您可以检查FPS property and the frame count property。与此:
fps = video.get(cv2.CAP_PROP_FPS)
amountOfFrames = video.get(cv2.CAP_PROP_FRAME_COUNT )
您甚至可以执行更“精美”的播放,将fps用作fps,并将其用作参数,如下所示:
cv2.waitKey(int(1000./float(fps))) # 1000 milliseconds / fps