OpenCV / Python:VideoCapture无法正确读取最后一帧

时间:2016-12-17 16:32:13

标签: python python-2.7 opencv video

我正在使用openCv和python 2.7。

我正在尝试阅读视频,但最后一帧没有类型,我无法显示。

我的视频有16帧,帧速率为4fps。

打印我得到的帧类型:

<type 'numpy.ndarray'>
<type 'numpy.ndarray'>
<type 'numpy.ndarray'>
...
<type 'numpy.ndarray'>
<type 'NoneType'>
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, fi
le C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\highgui\src\
window.cpp, line 271
Traceback (most recent call last):
  File "3_1.py", line 113, in <module>
    cv2.imshow('frame',frame)
cv2.error: C:\builds\master_PackSlaveAddon-win64-vc12-static\opencv\modules\high
gui\src\window.cpp:271: error: (-215) size.width>0 && size.height>0 in function
cv::imshow

我的代码是:

cap_2 = cv2.VideoCapture('video.avi')
while(cap_2.isOpened()):
    ret, frame = cap_2.read()

    print type(frame)
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break


cap_2.release()
cv2.destroyAllWindows()

1 个答案:

答案 0 :(得分:0)

谢谢你@DanMašek。

问题是我没有测试ret以查看读取成功的位置。所以文件是开放的,但没有新的框架可供阅读,因此我得到了NoneType Error

因此,我最后的正确代码是:

cap_2 = cv2.VideoCapture('video.avi')
while(cap_2.isOpened()):
    ret, frame = cap_2.read()

    if ret == true:
        print type(frame)
        cv2.imshow('frame',frame)
        if cv2.waitKey(1) & 0xFF == ord('q'):
             break

cap_2.release()
cv2.destroyAllWindows()