import cv2
import numpy as np
cap = cv2.VideoCapture('traffic.avi')
retval, frame = cap.read()
print retval
================ RESTART: J:\Python For DIP\traffic_video.py ================
False
>>>
Retvalの値は常にFalseです。つまり、コマンドによってビデオが読み取られません。フレームを読み取るにはTrueでなければなりません。どうすればいいかわかりません。ただし、デフォルトのWebカメラを使用すると、Trueになります。多くの動画を試しましたが、同じ問題が発生します。注:私はffmpegを正しくインストールしました。
注:これは完全なコードではありません。この手順では、cap.read()をTrueまたはFalseのどちらかのみ検証しています。
この方法は100%保証されています
まず、OpenCVのバージョンを確認します。たとえば、2.4.11のようにします。 Pythonシェルで次のコマンドを入力して確認できます。
>>> from cv2 import __version__
>>> __version__
'2.4.11'
>>>
次にC:\opencv\build\x86\vc12\bin
に移動し、opencv_ffmpeg2411.dll
をコピーします。最後にPython exのルートディレクトリに移動します。例:C:\Python27
に貼り付け、その中にopencv_ffmpeg2411.dll
を貼り付けます
opencv_ffmpeg2411.dllファイルの名前を確認し、opencvのバージョンが書き込まれているかどうかを確認します。書き込まれていない場合は、次のopencv_ffmpeg(ドットのないopencvのバージョン)を実行してください。
その後、新しいPythonファイルを作成し、このコードをコピーして貼り付け、独自のビデオをロードします
import numpy as np
import cv2
# Capture video from file
cap = cv2.VideoCapture('your video')
while True:
ret, frame = cap.read()
if ret == True:
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
cv2.imshow('frame',gray)
if cv2.waitKey(30) & 0xFF == ord('q'):
break
else:
break
cap.release()
cv2.destroyAllWindows()
たとえば、次のような出力ビデオがあります。 Result
Python=のルートディレクトリを見つけるのは少し難しいかもしれません。Enthoughtディストリビューションを使用していて、最初にopencv_ffmpeg
ファイルを間違ったPythonディレクトリに入れます。
違う:
C:\Users\USERNAME\AppData\Local\Programs\Python\Python35-32
正しい:
C:\Users\USERNAME\AppData\Local\Enthought\Canopy\User
簡単に言えば、正しいPythonディレクトリを見つけてください。
これを試して
cap = cv2.VideoCapture('traffic.avi').start()
retval, frame = cap.read()
print retval
あなたのopencvバージョン> 4.0の場合