【问题标题】:OpenCV/Python: VideoCapture can't read the last frame correctlyOpenCV/Python:VideoCapture 无法正确读取最后一帧
【发布时间】:2017-05-03 05:07:14
【问题描述】:

我正在使用 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()

【问题讨论】:

  • 那不是最后一帧,那时你已经过了最后一帧。在将imshow 传递给imshow 之前,您不会测试ret 以查看读取是否成功,也不会测试frame 是否为空。此外,只要视频打开,VideoCapture::isOpened() 就会返回 True。读取所有帧不会影响这一点。

标签: python python-2.7 opencv video


【解决方案1】:

谢谢@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()

【讨论】:

    猜你喜欢
    • 2021-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-30
    • 1970-01-01
    相关资源
    最近更新 更多