Pergunta

Eu gostaria de saber como posso gravar um vídeo em MATLAB com minha webcam.

Foi útil?

Solução

NOTA:. Este é agora atualizado para uso com versões mais recentes do MATLAB, uma vez que algumas das funcionalidades mais velho foi substituído e removido

Se você já sabe como uma única imagem de uma webcam , então ele deve ser apenas uma questão de costura as imagens juntas em um filme. Você pode usar um VideoWriter objeto para abrir um arquivo de filme e, em seguida, adicionar imagens sequenciais utilizando a href="https://www.mathworks.com/help/matlab/ref/videowriter.writevideo.html" rel="nofollow noreferrer"> método writeVideo . Por exemplo:

aviObject = VideoWriter('myVideo.avi');  % Create a new AVI file
for iImage = 1:100                       % Capture 100 frames
  % ...
  % You would capture a single image I from your webcam here
  % ...
  writeVideo(aviObject, I);  % Add the image to the AVI file
end
close(aviObject);  % Close the AVI file

Eu apenas usei um loop como um exemplo simples, mas você pode querer usar um timer se você em vez quer capturar imagens e adicioná-los para o arquivo AVI em intervalos regulares de tempo.

Outras dicas

Primeiro construir uma interface de entrada de vídeo

vid = videoinput('winvideo',1,'RGB24_400x300');

Você vai precisar ajustar o último pedaço de sua webcam. Para encontrar uma lista de dispositivos de webcam (e outras coisas além) use:

imaqhwinfo

A seguir faz a primeira webcam em um objeto

a=imaqhwinfo('winvideo',1)

Encontre a lista de formatos de vídeo suportados com

a.SupportedFormats

Em seguida, você quer determinar sua taxa de quadros (mais sobre isso aqui ):

set(vid,'FramesPerTrigger',100);
start(vid);
wait(vid,Inf);

% Retrieve the frames and timestamps for each frame.
[frames,time] = getdata(vid, get(vid,'FramesAvailable'));

% Calculate frame rate by averaging difference between each frame's timestamp
framerate = mean(1./diff(time))

FrameGrabInterval especifica propriedade quantas vezes quadros são armazenados a partir do fluxo de vídeo. Por exemplo, se nós configurá-lo para 5, em seguida, apenas 1 em 5 quadros é mantido - os outros 4 quadros serão descartados. Usando o framerate, determinar quantas vezes você deseja obter quadros

set(vid,'FrameGrabInterval',10);

Para determinar quantos quadros para adquirir no total, calcular o número total de quadros que seriam adquiridos na taxa de quadros do dispositivo, e depois dividir pelo FrameGrabInterval.

capturetime = 30;
interval = get(vid,'FrameGrabInterval');
numframes = floor(capturetime * framerate / interval)

Agora você está pronto para gravar e reproduzir com vídeo usando o comando getdata (peekdata também é útil), no entanto ...

Se um grande número de quadros será adquirido, é mais prático para registrar as imagens para o disco ao invés de memória. Usando o Image Acquisition Toolbox, você pode registrar imagens diretamente para um arquivo AVI. Nós configurar isso usando a propriedade LoggingMode.

set(vid,'LoggingMode','disk');

Criar um objeto de arquivo AVI para fazer logon para, usando o comando avifile. Nós deve especificar o nome do arquivo para uso, e a taxa de quadros que o arquivo AVI devem ser reproduzidos no. Em seguida, defina a propriedade DiskLogger do objeto de entrada de vídeo para o arquivo AVI.

avi = avifile('timelapsevideo','fps',framerate);
set(vid,'DiskLogger',avi);

Iniciar a aquisição de lapso de tempo, e espera para a aquisição completa. Observe que o Image Acquisition Toolbox não amarrar MATLAB® enquanto ele está adquirindo. Você pode começar a aquisição e continuar trabalhando em MATLAB.

start(vid);
wait(vid,Inf); % Wait for the capture to complete before continuing.

Uma vez que a captura é concluída, recuperar o objeto de arquivo AVI, e usar a função de fecho para liberar os recursos associados a ele.

avi = get(vid,'DiskLogger');
avi = close(avi);

Quando você é feito com o objeto de entrada de vídeo, você deve usar a função de apagar para liberar os recursos de hardware associados, e removê-lo do espaço de trabalho usando a função clara.

delete(vid);
clear vid;

Uma grande parte, mas não todo, do acima foi desenhado a partir de aqui .

Quando você bate start(vid) você pode perceber que há um pouco de atraso antes de quadros começam a ser adquirido. Isso é ruim se você está tentando sincronizar o vídeo com alguma coisa. Neste caso, você vai querer tentar trabalhar com o gatilho :

triggerconfig(vid,'manual');
start(vid); %There'll be a delay here, but nothing is being captured
trigger(vid); %Use this line when you want the capture to start. There should be very little delay.

Mais informações sobre gatilhos e sincronização é aqui .

Aqui você pode ver grandes vídeos como capturar e processar as imagens de webcam, para que a gravação não deve ser difícil:

http: // blogs. mathworks.com/videos/2008/01/18/cool-feature-video-processing-demos/

Na minha vida na faculdade eu fiz esse projeto nomeado como

/ Gravador de vídeo e leitor de aplicação

Áudio baseado em MATLAB

Em que eu tenho fez a gravação de áudio e gravação de vídeo e reprodução em programação Matlab. você pode baixar o código fonte do href="http://shareprogrammingtips.com/wp-content/uploads/2011/09/avplayer.zip" aqui

Eu escrevi recentemente um post sobre como gravar áudio sincronizado e vídeo em MATLAB enviando linhas de comando para o programa ffmpeg. Você pode descobrir mais aqui , mas abaixo é uma amostra usando algumas configurações que faziam sentido no meu computador.

dos('ffmpeg -list_devices true -f dshow -i dummy')

dos('ffmpeg -f dshow -list_options true -i video="USB2.0 HD UVC WebCam')

dos('ffmpeg -f dshow -video_size 1280x720 -framerate 30 -audio_buffer_size 80 -i video="USB2.0 HD UVC WebCam":audio="Microphone (Realtek High Definition Audio)" -t 10 -c:v libx264 -preset veryfast -crf 25 test_vid2.mp4');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top