2011-02-08 3 views
7

ビデオファイルからグラブフレーム:http://opencv.willowgarage.com/wiki/InstallGuide%20%3A%20DebianOpenCVの+のpython - 私はすべての必要なPREREQSとUbuntuの上でソースからコンパイルしたに応じて - 私はOpenCVのを使用してファイルからのフレームをキャプチャすることができないよう

#!/usr/bin/env python 

import cv 
import sys 

files = sys.argv[1:] 

for f in files: 
    capture = cv.CaptureFromFile(f) 
    print capture 

    print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_WIDTH) 
    print cv.GetCaptureProperty(capture, cv.CV_CAP_PROP_FRAME_HEIGHT) 

    for i in xrange(10000): 
     frame = cv.QueryFrame(capture) 
     if frame: 
      print frame 

出力:

[email protected]:~/opencv$ ./test.py bbb.avi 
<Capture 0xa37b130> 
0.0 
0.0 

フレームは常にNoneです...

は、私が使用してI420形式にビデオファイルをトランスコードしました:

mencoder $1 -nosound -ovc raw -vf format=i420 -o $2 

+0

これはまさに私が探していたものです。これは、Opencvの2.1パッケージを使用してUbuntu 10.04で私にとって完璧に機能しました。ありがとう! – Cerin

答えて

4

私はソースからUbuntuでコンパイルされたOpenCV 2.2.0を使用しています。あなたが提供したソースコードが期待どおりに動作することを確認できます。だから問題はどこか他の場所にある。

私は(私のマシン上の問題を少しそれをされたインストール)MEncoderでを使用して問題を再現できなかったので、私はAVIコンテナに生の映像をラップするffmpegを使用:

ffmpeg -s cif -i ~/local/sample-video/foreman.yuv -vcodec copy foreman.avi 

(職長を。 yuvは、あなたがlook aroundならネットで見つけることができる標準的なCIF画像シーケンスです)。 ffmpegからソースを通じてAVIを実行

はこれを与える:予想通り

[email protected]:~/Desktop/stackoverflow$ python ocv_video.py foreman.avi 
<Capture 0xa71120> 
352.0 
288.0 
<iplimage(nChannels=3 width=352 height=288 widthStep=1056)> 
<iplimage(nChannels=3 width=352 height=288 widthStep=1056)> 
... 

だから、物事が働きます。チェックする対象:

  • 標準出力/標準エラーでエラーが発生しますか? OpenCVはffmpegライブラリを使用してビデオファイルを読み込みますので、参考にしてください。ここでは、(自分の問題に似て聞こえる)コンテナなしでRAWビデオファイルを再生しようとすると何が起こるかです:

エラー:

[email protected]:~/Desktop/stackoverflow$ python ocv_video.py foreman.yuv 
[IMGUTILS @ 0x7fff37c8d040] Picture size 0x0 is invalid 
[IMGUTILS @ 0x7fff37c8cf20] Picture size 0x0 is invalid 
[rawvideo @ 0x19e65c0] Could not find codec parameters (Video: rawvideo, yuv420p) 
[rawvideo @ 0x19e65c0] Estimating duration from bitrate, this may be inaccurate 
GStreamer Plugin: Embedded video playback halted; module decodebin20 reported: Your GStreamer installation is missing a plug-in. 
<Capture 0x19e3130> 
0.0 
0.0 
  • はあなたのAVIファイルは、実際に必要な情報が含まれていることを確認しますビデオを再生する。少なくとも、これはフレームの寸法でなければなりません。 RAWビデオには通常、実際のピクセルデータ以外の情報は含まれていないため、フレームの寸法とFPSを知る必要があります。 FPSを間違って推測しても、表示可能なビデオを得ることはできますが、寸法が間違っていると、ビデオは視聴できなくなります。
  • 開こうとしているAVIファイルが実際に再生可能であることを確認してください。試してみてくださいffplay file.avi - それが失敗した場合は、ファイルに問題がある可能性があります。 mencoderの代わりにffmpegを使用してトランスコードしてみてください。
  • 上記と同じ方法で他の動画を再生できることを確認してください。できない場合は、ffmpegインストールが壊れている可能性があります。
+0

ありがとうmisha、私はこれらのアイデアを試してみるつもりです - ffmpegからのエラーは私が知る限りではありません... 1つの質問、wikiにあるものからすべての依存関係をインストールしたときに、 –

5

gstreamer-ffmpegまたはgsteamer-pythonまたはgsteamer-python-develパッケージがインストールされていません。私はそれらの3つすべてをインストールしました。まったく同じ問題が解決されました。

+0

これは誤字ですが、コピー/貼り付けをしている人は、実際には "gstreamer-python"と "gstreamer-python-devel"を実際に取得していることを確認してください。 Rを忘れないで。 – billmalarky

関連する問題