2016-12-17 12 views
-1

私はopenCvとPython 2.7を使用しています。OpenCV/Python:VideoCaptureが最後のフレームを正しく読み取れません

私はビデオを読もうとしていますが、最後のフレームにはタイプがなく、表示できません。

私のビデオは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

。読み込みが成功したかどうかを確認するために 'ret'をテストしたり、' imshow'に渡す前に 'frame'を空でないとテストしたりしません。さらに、 'VideoCapture :: isOpened()'は、ビデオが開いている限り、 'True'を返します。すべてのフレームを読み込んでも影響はありません。 –

答えて

0

はDanMaš[email protected]ありがとうございます。

問題は、読み取った場所を確認するために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() 
関連する問題