2011-02-08 10 views
7

tôi dường như không thể nắm bắt được khung hình từ một tập tin sử dụng OpenCV - Tôi đã biên soạn từ nguồn trên Ubuntu với tất cả các điều kiện tiên quyết cần thiết theo: http://opencv.willowgarage.com/wiki/InstallGuide%20%3A%20DebianOpenCV + python - khung lấy từ một file video

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

Output:

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

Các khung luôn Không ...

tôi đã chuyển mã một tập tin video sang định dạng i420 sử dụng:

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

Bất kỳ ý tưởng nào?

+0

Đây chính xác là những gì tôi đang tìm kiếm.Điều này làm việc hoàn hảo cho tôi trên Ubuntu 10.04 bằng cách sử dụng các gói 2.1 của Opencv. Cảm ơn! – Cerin

Trả lời

4

Tôi đang sử dụng OpenCV 2.2.0, được biên dịch trên Ubuntu từ nguồn. Tôi có thể xác nhận rằng mã nguồn bạn cung cấp hoạt động như mong đợi. Vì vậy, vấn đề là ở một nơi khác.

tôi không thể tái tạo vấn đề của bạn sử dụng bộ mã hóa (cài đặt nó là một chút của một vấn đề trên máy tính của tôi) vì vậy tôi sử dụng ffmpeg để bọc một video thô trong container AVI:

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

(quản đốc. yuv là một chuỗi hình ảnh CIF chuẩn mà bạn có thể tìm thấy trên mạng nếu bạn look around).

Chạy AVI từ ffmpeg thông qua nguồn cung cấp cho bạn này:

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

Vì vậy, mọi thứ làm việc như mong đợi. Những gì bạn nên kiểm tra:

  • Bạn có gặp bất kỳ lỗi nào về lỗi chuẩn/đầu ra chuẩn không? OpenCV sử dụng các thư viện ffmpeg để đọc các tệp video, vì vậy hãy chú ý đến các thông báo mang tính thông tin. Đây là những gì sẽ xảy ra nếu bạn cố gắng để chơi một file video RAW mà không có một container (âm thanh tương tự như vấn đề của bạn):

lỗi:

[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 
  • Hãy chắc chắn rằng tập tin AVI của bạn thực sự có chứa các thông tin cần thiết để phát lại video. Ở mức tối thiểu, đây phải là kích thước khung. Video RAW thường không chứa bất kỳ thông tin nào ngoài dữ liệu pixel thực tế, vì vậy, cần biết kích thước khung và FPS. Bạn có thể đoán sai FPS và vẫn nhận được một video có thể xem được, nhưng nếu bạn nhận được kích thước sai, video sẽ không thể xem được.
  • Đảm bảo tệp AVI bạn đang cố mở thực sự có thể phát. Hãy thử ffplay file.avi - nếu không thành công, thì sự cố có thể xảy ra với tệp. Hãy thử sử dụng ffmpeg để chuyển mã thay vì mencoder.
  • Đảm bảo bạn có thể phát các video khác, sử dụng cùng phương pháp như trên. Nếu bạn không thể, thì có khả năng là cài đặt ffmpeg của bạn đã bị hỏng.
+0

Cảm ơn misha, tôi sẽ thử những ý tưởng này - không có lỗi từ ffmpeg như tôi có thể nói ... Một câu hỏi, bạn đã sử dụng bất kỳ gói nào khác khi cài đặt tất cả các phụ thuộc từ những gì họ có trên wiki của họ? –

5

Bạn chưa cài đặt gói gstreamer-ffmpeg hoặc gsteamer-python hoặc gsteamer-python-devel. Tôi đã cài đặt cả ba. và cùng một vấn đề đã được giải quyết.

+0

Đó là lỗi đánh máy, nhưng những người đang sao chép/dán, đảm bảo bạn thực sự nhận được "gstreamer-python" và "gstreamer-python-devel". Đừng quên R. – billmalarky