Запись массивов с использованием cv2 VideoWriter - PullRequest
4 голосов
/ 14 февраля 2012

У меня проблема с написанием примера игрушечного видео с использованием opencv2.3.1 VideoWriter, вот как я это делаю:

writer = cv2.VideoWriter('test1.avi',cv.CV_FOURCC('P','I','M','1'),25,(640,480))
for i in range(1000):
    x = np.random.randint(10,size=(480,640)).astype('uint8')
    writer.write(x)
#del writer (with or without tested)

Я пробовал каждую возможную комбинацию, полученную с 0-байтовым файлом, если расширение было MPG, и 5,5 КБ, если это AVI. Я должен сказать, что некоторые отметили, что я должен собрать библиотеку ffmpeg из исходного кода, а не apt-get. Что ж, я сделал это на новой машине, основанной на помощи этого сайта http://vinayhacks.blogspot.com/2011/11/installing-opencv-231-with-ffmpeg-on-64.html., которая также вызвала ошибку при компиляции opencv (ошибка была связана с ffmpeg). Теперь у меня действительно нет идей, как создать видео с помощью OPENCV?

Заранее спасибо

Ответы [ 3 ]

4 голосов
/ 08 июля 2015

VideoWriter имеет последний аргумент isColor со значением по умолчанию True. Так что если вы измените его на False, то вы можете написать свои 2D массивы.

import cv2
import numpy as np

writer = cv2.VideoWriter('test1.avi', cv2.VideoWriter_fourcc(*'PIM1'), 25, (640, 480), False)
for i in range(100):
    x = np.random.randint(255, size=(480, 640)).astype('uint8')
    writer.write(x)
1 голос
/ 15 сентября 2013

Здравствуйте, я новичок в opencv, и у меня была такая же проблема.Похоже, что writer.write (x) должен быть массивом с значениями RGB, а не скалярами.Я решил проблему следующим образом:

import cv2
import cv2.cv as cv
import numpy as np

writer = cv2.VideoWriter('test1.avi',cv.CV_FOURCC('P','I','M','1'),25,(640,480))
for i in range(1000):
    x = np.random.randint(255,size=(480,640)).astype('uint8')
    x = np.repeat(x,3,axis=1)
    x = x.reshape(480, 640, 3)
    writer.write(x)

Я предполагаю, что есть более чистые способы сделать это, но я не нашел ни одного.

1 голос
/ 15 февраля 2012

Какую ОС вы используете? Вы уверены, что в вашей системе установлен кодек PIM1?

Я использую Windows, и я могу использовать cv.FOURCC(*"DIB ") для несжатого видео или использовать -1, чтобы показать диалоговое окно кодека.

После установки ffdshow я могу использовать cv.FOURCC(*"ffds") для кодирования видео в формате MPEG-4.

...