2015-01-20 5 views
2

я могу захватить видео с веб-камеры и сохранить его в порядке с этим кодомКак сохранить маски видео в openCV2 питона

cap = cv2.VideoCapture(0) 
fgbg= cv2.BackgroundSubtractorMOG() 

fourcc = cv2.cv.CV_FOURCC(*'DIVX') 
out = cv2.VideoWriter('output.avi', fourcc, 20.0, (640,480)) 

while(cap.isOpened()): 
    ret,frame = cap.read() 
    if ret: 
     fgmask = fgbg.apply(frame) 
     out.write(frame)   #Save it          
     cv2.imshow('Background Subtraction', fgmask) 
     if cv2.waitKey(1) & 0xFF == ord('q'): 
      break     #q to quit          
    else: 
     break      #EOF           

cap.release() 
out.release() 
cv2.destroyAllWindows() 

Это записывает его как можно было бы ожидать, и показывает вычитание фона вещь также. Он сохраняет его на output.avi. Все хорошо. Но я не могу сохранить маску переднего плана, это дает мне ошибку Could not demultiplex stream. (Эта строка изменена в коде выше).

out.write(fgmask)   #Save it  

Почему это? Является ли fgmask не рамкой, например, когда я читаю из захвата?

ответ

2

Хорошо, понял! Дайте мне знать, если есть более эффективный способ сделать это, или если у меня что-то не хватает.

Маска переднего плана, сгенерированная при вычитании фона, представляет собой 8-битное двоичное изображение, поэтому мы должны преобразовать его в другой формат. Вероятно, существует лучший вариант, но я использовал RGB

frame = cv2.cvtColor(fgmask, cv2.COLOR_GRAY2RGB) 

 Смежные вопросы

  • Нет связанных вопросов^_^