動画を読み込んで表示するプログラムでエラーが発生。

import cv2

src_m = cv2.VideoCapture("ファイル名")

r, f = src_m.read() #←1フレーム読み込み
cv2.imshow(title, f) #←フレーム表示

aviファイルはエラーが出ずに表示できるものとできない物があった。
エラーが出なかったものも画像が斜めに変形して表示されおかしい状態。
mp4, tsは読み込み出来ずだった。

エラーメッセージは

error: ........opencvmoduleshighguisrcwindow.cpp:261: error: (-215) size.width>0 && size.height>0 in function cv::imshow

原因は"import cv2"でインポートされるモジュール cv2.pyd が

何故かc:PythonDLLs 内に単独であって

本来インポートされるべき

C:Python27Libsite-packages 内の cv2.pyd が読み込まれていなかった。

たぶんインポートの順番かPYTHONPATHの記述の順番のせいか?


これはcv2をインストールし直した時のバージョンと

インポートして cv2.__version__ で確認したバージョンが一致しなかったことから判明。


このエラーは cv2.pyd と同じディレクトリにopencv_ffmpegという恐らく

デコード担当のファイルがない時に出るらしく今回はまさにそれだったと思われる。


opencv_ffmpegが同じディレクトリに必要というのは下記にあった。
stackoverflow.com