web-dev-qa-db-ja.com

VideoCaptureを使用してOpenCV + Pythonでビデオを読み取ったり再生したりできない

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のどちらかのみ検証しています。

8
Tes3awy

この方法は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

13
Tes3awy

Python=のルートディレクトリを見つけるのは少し難しいかもしれません。Enthoughtディストリビューションを使用していて、最初にopencv_ffmpegファイルを間違ったPythonディレクトリに入れます。

違う:

C:\Users\USERNAME\AppData\Local\Programs\Python\Python35-32

正しい:

C:\Users\USERNAME\AppData\Local\Enthought\Canopy\User

簡単に言えば、正しいPythonディレクトリを見つけてください。

1
P__2

これを試して

cap = cv2.VideoCapture('traffic.avi').start()
retval, frame = cap.read()
print retval

あなたのopencvバージョン> 4.0の場合