Como faço para adquirir imagens em intervalos de tempo usando MATLAB?

votos
3

Eu sou um novato MATLAB e eu gostaria de saber como posso adquirir e salvar 20 imagens em intervalos de 5 segundos da minha câmera. Muito obrigado.

Publicado 23/09/2009 em 19:11
fonte usuário
Em outras línguas...                            


4 respostas

votos
6

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) usar:

imaqhwinfo

O que se segue faz a primeira webcam para um objecto

a=imaqhwinfo('winvideo',1)

Encontre a lista de formatos de vídeo suportados com

a.SupportedFormats

Então você vai querer começar a interface:

start(vid);
preview(vid);

Agora você pode fazer o seguinte:

pics=cell(1,20)
for i=1:20
   pause(5);
   pics{i}=getsnapshot(vid);
end

Ou, como outros comentadores notaram, você também pode usar um timer Matlab para o intervalo.

Se você deseja capturar imagens com um intervalo consideravelmente mais curto (1 ou mais por segundo), pode ser mais útil considerar a webcam como uma fonte de vídeo. Eu deixei uma resposta a esta pergunta , que estabelece métodos para conseguir isso.

Respondeu 20/09/2012 em 10:37
fonte usuário

votos
1

Existem várias maneiras de fazer isto, cada um com vantagens e desvantagens. Com base nas informações que você postou até agora, aqui está como eu faria isso:

vid = videoinput('dcam', 1'); % Change for your hardware of course.
vid.FramesPerTrigger = 20;
vid.TriggerRepeat = inf;
triggerconfig(vid, 'manual');
vid.TimerFcn = 'trigger(vid)';
vid.TimerPeriod = 5;
start(vid);

Isto irá adquirir 20 imagens a cada cinco segundos até que você chamar STOP. Você pode alterar o parâmetro TriggerRepeat para mudar quantas vezes aquisição irá ocorrer.

Isto, obviamente, não faz qualquer processamento nas imagens depois de serem adquiridas.

Respondeu 24/09/2009 em 13:54
fonte usuário

votos
1

Aqui está um rápido tutorial sobre como obter uma imagem http://www.mathworks.com/products/imaq/description5.html Você obteve esse tipo de coisa para trabalhar ainda?

EDITAR:

Agora que você pode obter uma imagem, você deseja obter vinte. Um objeto temporizador ou um simples loop for é o que você vai precisar.

exemplo simples objeto temporizador

Exemplo de vídeo de temporizadores em MATLAB

Certifique-se de definir as "tarefas a executar" campo a vinte. Além disso, você deve encerrar todo o código que você tem para uma imagem encaixar em uma única função.

Respondeu 23/09/2009 em 19:41
fonte usuário

votos
0

Para adquirir a imagem, não a câmera vem com alguma forma documentada para controlá-lo a partir de um computador? MATLAB suporta links para bibliotecas externas . Ou você pode comprar a caixa de ferramentas MATLAB adequado, como sugerido por MatlabDoug.

Para salvar a imagem, IMWRITE é provavelmente a opção mais fácil.

Para repetir a ação, um simples PARA loop com uma pausa lhe dará mais ou menos o que você quer com muito pouco trabalho:

 for ctr = 1:20
   img = AcquireImage(); % your function goes here
   fname = ['Image' num2str(ctr)]; % make a file name
   imwrite(img, fname, 'TIFF');
   pause(5); % or whatever number suits your needs
 end

Se, no entanto, você precisa exatos intervalos de 5 segundos, você vai ter que mergulhar em TIMER s. Aqui está um exemplo simples:

function AcquireAndSave
  persistent FileNum;
  if isempty(FileNum)
    FileNum = 1;
  end
  img = AcquireImage();
  fname = ['Image' num2str(FileNum)];
  imwrite(img, fname, 'TIFF');
  disp(['Just saved image ' fname]);
  FileNum = FileNum + 1;
end

>> t = timer('TimerFcn', 'ShowTime', 'Period', 5.0, 'ExecutionMode', 'fixedRate');
>> start(t); 
...you should see the disp line from AcquireAndSave repeat every 5 seconds...
>> stop(t);
>> delete(t);
Respondeu 23/09/2009 em 22:13
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more