2011-02-08 12 views
7

bir video dosyasından kapmak çerçeveleri: http://opencv.willowgarage.com/wiki/InstallGuide%20%3A%20DebianOpenCV + piton - Ben gerekli tüm önkoşul olan Ubuntu üzerinde kaynağından derledik göre - OpenCV kullanarak bir dosyadan kareleri yakalamak için görünmüyor

#!/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 

Çıktı:

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

çerçeveleri hep Hiçbiri vardır ...

kullanıyorum I420 formatında bir video dosyası dönüştürülmüş ettik:

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

Herhangi bir fikir?

+0

Tam olarak aradığım şey budur.Bu, Ubuntu 10.04'te Opencv'in 2.1 paketlerini kullanarak benim için mükemmel çalıştı. Teşekkürler! – Cerin

cevap

4

Ubuntu kaynağından derlenen OpenCV 2.2.0 kullanıyorum. Sağladığınız kaynak kodun beklendiği gibi çalıştığını onaylayabilirim. Yani sorun başka bir yerdedir.

Ben mencoder kullanarak sorunu yeniden olamazdı (benim makinede bir sorun nedeniyle biraz edilir yükleyerek) bu yüzden AVI kabında ham videoyu sarmak için ffmpeg kullandı:

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

(ustabaşı. yuv, ağda look around varsa bulabileceğiniz standart bir CIF görüntü dizisidir. Kaynağınızın aracılığıyla ffmpeg gelen AVI Running

bu verir: beklendiği gibi

Yani
[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)> 
... 

işlerin. Ne kontrol etmelisiniz:

  • Standart çıkış/standart hatası ile ilgili herhangi bir hata alıyor musunuz? OpenCV video dosyalarını okumak için ffmpeg kütüphanelerini kullanır, bu yüzden bilgilendirici mesajların uyanmasında olun. Burada bir kap olmadan RAW video dosyasını oynatmaya çalışın neler olur? (Sorununuza benzer sesler):

hatası:

[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 dosyası aslında gerekli bilgileri içerdiğinden emin olun videoyu oynatmak için En azından, bu çerçeve boyutları olmalıdır. RAW videosu, gerçek piksel verilerinin yanı sıra tipik olarak herhangi bir bilgi içermez, bu nedenle çerçeve boyutlarını ve FPS'yi bilmek gereklidir. FPS'yi yanlış tahmin edebilir ve hala görüntülenebilir bir video elde edebilirsiniz, ancak boyutları yanlış alırsanız, video görünmez olur.
  • Açmaya çalıştığınız AVI dosyasının gerçekte oynatılabilir olduğundan emin olun. ffplay file.avi'u deneyin - bu başarısız olursa, sorun muhtemelen dosyada olabilir. mencoder yerine transcode için ffmpeg kullanmayı deneyin.
  • Diğer videoları, yukarıdakiyle aynı yöntemi kullanarak oynadığınızdan emin olun. Yapamazsanız, ffmpeg yüklemenizin bozuk olması muhtemeldir.
+0

Teşekkürler misha, bu fikirleri bir deneyin - ffmpeg'den anlayabildiğim kadarıyla bir hata vermeyeceğim ... Bir soru, tüm bağımlılıkları vikilerinde sahip olduklarından yüklediğinizde farklı paketler kullandınız mı? –

5

Yüklü gstreamer-ffmpeg veya gsteamer-python veya gsteamer-python-devel paketleri yok. Her üçünü de kurdum. ve aynı sorun çözüldü.

+0

Bu bir yazım hatası, ancak kopyalama/yapıştırma olanlar, aslında "gstreamer-python" ve "gstreamer-python-devel" aldığınızdan emin olun. R'yi unutma. – billmalarky