2009-09-26 19 views
12

tôi cần phải:Mô-đun Python được sử dụng nhiều nhất để xử lý video?

  1. mở một file video
  2. lặp qua các khung hình của file như hình ảnh
  3. Do một số phân tích trong khung hình ảnh này của video
  4. Draw trong hình ảnh này của Video
  5. Tạo một video mới với những thay đổi

OpenCV không hoạt động cho webcam của tôi, nhưng python-gst là đang làm việc. Điều này có thể sử dụng python-gst không?

Cảm ơn bạn!

+1

Mặc dù đây là cũ, tôi có mã Python lấy tên tệp và trả về trình lặp của hình ảnh PIL. Tôi có thể đăng mã nguồn nếu có ai quan tâm. – carl

Trả lời

6

Bạn có nghĩa là opencv không thể kết nối với webcam của bạn hoặc không thể đọc tệp video được ghi bởi nó?

Bạn đã thử lưu video ở định dạng khác chưa?

OpenCV có lẽ là hỗ trợ tốt nhất hình ảnh python công cụ xử lý

+1

+1 để giới thiệu OpenCV. – whatnick

0

Chỉ cần xây dựng một C/C++ wrapper cho webcam của bạn và sau đó sử dụng SWIG hoặc SIP để truy cập vào các chức năng từ Python. Sau đó, sử dụng OpenCV trong Python là thư viện hình ảnh máy tính nguồn mở tốt nhất trong tự nhiên.

Nếu bạn lo lắng về hiệu suất và làm việc dưới Linux, bạn có thể tải xuống phiên bản miễn phí của Intel Performance Primitives (IPP) có thể tải trong thời gian chạy với nỗ lực không từ OpenCV. Đối với các thuật toán nhất định, bạn có thể tăng 200% hiệu suất, cộng với hỗ trợ đa lõi tự động cho hầu hết các chức năng tốn thời gian.

+1

Hãy nhớ rằng không nhiều người biết cách tạo trình bao bọc cho Python và câu hỏi của OP chủ yếu là giao dịch với một thư viện có từ trước. – skeggse

+0

Old Q nhưng tôi muốn giới thiệu Cython trên SWIG hoặc SIP. Đó là * nhiều * dễ sử dụng hơn, hỗ trợ C và C++ và có tài liệu tốt hơn. Tôi đã thử tất cả 3 công cụ nói trên cộng với Boost Python và Cython là người duy nhất tôi thực sự có thể làm việc trong một khoảng thời gian hợp lý. – Endophage

3

Tôi sẽ tự mình trải qua điều này. Nó chỉ là một vài dòng trong MATLAB sử dụng mmreader, nhưng tôi đã thổi hai ngày làm việc cố gắng tìm ra cách để kéo khung hình từ một tập tin video vào numpy. Nếu bạn có đủ không gian đĩa, và nó không phải là thời gian thực, bạn có thể sử dụng:

mplayer -noconsolecontrols -vo png blah.mov 

và sau đó kéo file .png vào numpy sử dụng:

pylab.imread('blah0000001.png') 

Tôi biết điều này không đầy đủ, nhưng nó vẫn có thể giúp bạn. Chúc may mắn!

+0

Tôi cảm thấy bạn.Tôi đánh giá liệu python sẽ là một thay thế tốt cho Matlab, và thấy nó thiếu nghiêm trọng, đặc biệt là với xử lý video đơn giản. –

3

tôi đã sử dụng kịch bản này để chuyển đổi một bộ phim với một mảng + cửa hàng nhị phân NumPy:

""" 
Takes a MPEG movie and produces a numpy record file with a numpy array. 

""" 
import os 

filename = 'walking' 
if not(os.path.isfile(filename + '.npy')): # do nothing if files exists 
    N_frame = 42 # number of frames we want to store 
    os.system('ffmpeg -i WALK.MOV.qt -f image2 foo-%03d.png') 
    # convert them to numpy 
    from numpy import zeros, save, mean 
    from pylab import imread 

    n_x, n_y, n_rgb = imread('foo-001.png').shape 

    mov = zeros((n_y, n_x, N_frame)) 

    for i_frame in range(N_frame): 
     name = 'foo-%03d.png' % (i_frame +1) 
     mov[:n_y,:n_x,i_frame] = flipud(mean(imread(name), axis=2)).T 

    os.system('rm -f foo-*.png') 
    save(filename + '.npy', mov) 

lưu ý rằng tùy thuộc vào công ước của bạn, bạn có thể không muốn lật hình ảnh. sau đó bạn có thể tải nó bằng cách sử dụng:

load('walking.npy') 
Các vấn đề liên quan