この質問は多くのウェブサイトで何度も提起されていますが、決定的な解決策ではありません。関数を使用してビデオでOpencvを実行しようとしています:
import cv2
cap = cv2.VideoCapture('video.mp4')
if(cap.isOpened()==False):
print "Error opening camera"
しかし、それは毎回失敗します。さまざまなサイトからほぼすべての手順を試しましたが、機能しませんでした(ffmpegを個別に再構築することを含む)。
どんな助けでも大歓迎です。
私のプラットフォームはUbuntu17とPython3です。
この回答はLinuxとPythonを念頭に置いて書かれていますが、一般的な考え方は、OpenCVでサポートされているすべてのOSと言語に適用できます。
ビデオファイルを開かないVideoCapture
クラスには多くの原因が考えられますが、ほとんどの場合、次の3つが当てはまります。
デフォルトでは、OpenCVはffmpegを使用してビデオファイルを読み取ります。 OpenCVはFFMPEGをサポートして構築されていない可能性があります。 OpenCVがFFMPEGをサポートして構築されているかどうかを確認するには、ターミナルで次のように入力します。
python -c "import cv2; print(cv2.getBuildInformation())" | grep -i ffmpeg
出力は次のようになります。
FFMPEG:はい
出力がNo
の場合は、オンラインガイドに従って、ffmpegをサポートするソースからOpenCVをビルドします。
FFMPEGに特定のファイルのコーデックがない可能性があります。例として このビデオ を使用して、FFMPEGにこのファイルのデコード機能があるかどうかを示します。
まず、このビデオファイルで使用されているエンコード形式を見つける必要があります。 mediainfo
プログラムを使用します。ターミナルで、次のように入力します。
mediainfo video_file.mp4
出力で、video見出しの下で、formatを探します。この場合、使用されるビデオエンコーディングは[〜#〜] avc [〜#〜]であり、これはH264の別名です。
ここで、FFMPEGが[〜#〜] avc [〜#〜]エンコードされたファイルをデコードするためのコーデックをサポートしているかどうかを調べます。ターミナル内:
ffmpeg -codecs | grep -i avc
私のマシンでは、出力は次のとおりです。
DEV.LS h264 H.264/AVC/MPEG-4 AVC/MPEG-4パート10(デコーダー:h264 h264_crystalhd h264_vdpau)(エンコーダー:libx264 libx264rgb )
[〜#〜] dev [〜#〜]に関心があります。これは、デコード、エンコード、およびビデオの略です。これは、[〜#〜] avc [〜#〜]がビデオエンコード形式であり、FFMPEGがこの形式のエンコード機能とデコード機能の両方をサポートしていることを意味します。
最後に、ファイルパスが正しいかどうか、またはファイルが存在するかどうかを確認します。
リンク からの手順に従いました
そして
上記のリンクのこのCmakeコマンドは以下のとおりです。
cmake -DWITH_CUDA = OFF -DBUILD_TIFF = ON -DBUILD_opencv_Java = ON -DWITH_FFMPEG = ON -DBUILD_opencv_python3 = ON -DENABLE_AVX = ON -DWITH_OPENGL = ON -DWITH_OPENCL = ON -DWITH_IPP = ON -DWITH_TB DWITH_VTK = OFF -DBUILD_TESTS = OFF -DBUILD_PERF_TESTS = OFF -DCMAKE_BUILD_TYPE = RELEASE -DBUILD_opencv_python2 = OFF -DCMAKE_INSTALL_PREFIX = $(python3 -c "import sys; print(sys.prefix)")-DPYTHON3_EXECUTABLE = $(python3 -c "from distutils.sysconfig import get_python_inc; print(get_python_inc())")-DPYTHON3_PACKAGES_PATH = $(python3 -c "from distutils.sysconfig import get_python_lib; print(get_python_lib())")-D CMAKE_BUILD_TYPE = RELEASE -D CMAKE_INSTALL_PREFIX =/usr/local -D INSTALL_PYTHON_EXAMPLES = ON -D INSTALL_C_EXAMPLES = OFF -D PYTHON_EXECUTABLE =/home/user/anaconda3/bin/python -D BUILD_EXAMPLES = ON -DCMAKE_BUILD_TYPE = RELEASE ..
私はOpenCVビルドの詩ではありませんが、正確なPYTHON_EXECUTABLE =/home/user/anaconda3/bin/pythonパスがOpenCVバインディングのポイントだと思います特定のpython更新する