Extraia quadros de vídeo usando MATLAB
Este tutorial irá discutir a extração dos quadros de um vídeo usando a função read()
no Matlab.
Extraia quadros de um vídeo usando a função read()
no MATLAB
Um vídeo é composto de muitos quadros. Em outras palavras, ele é composto de imagens, portanto, quando imagens ou quadros forem repetidos um após o outro, veremos um vídeo sendo reproduzido. Por exemplo, suponha que um vídeo seja composto de 60 quadros por segundo, o que significa que haverá 60 quadros em um único segundo. Os frames mudam tão rápido que vemos apenas um vídeo sendo reproduzido. Em primeiro lugar, precisamos ler o vídeo em Matlab usando a função VideoReader()
. Depois disso, precisamos encontrar o número total de quadros presentes no vídeo usando a propriedade NumberOfFrames
. Usaremos um loop for, que começará em 1 e terminará no número máximo de quadros do vídeo. Agora vamos encontrar cada quadro presente no vídeo e mostrá-los em um gráfico usando as funções subplot()
e imshow()
. Por exemplo, vamos ler um vídeo e extrair todos os seus frames no Matlab. Veja o código abaixo.
v = VideoReader('bon_fire_dog_2.mp4');
totalFrames = v.NumberOfFrames;
NFP = ceil(sqrt(totalFrames));
for i=1:totalFrames
frame = read(v,i);
subplot(NFP,NFP,i)
imshow(frame)
end
Resultado:
No código acima, a variável NPF
define o número de linhas e colunas na figura acima. Também podemos salvar cada quadro como uma imagem dentro de uma pasta usando a função imwrite()
. Veja o código abaixo.
v = VideoReader('bon_fire_dog_2.mp4');
totalFrames = v.NumberOfFrames;
NFP = ceil(sqrt(totalFrames));
for i=1:totalFrames
frame = read(v,i);
ImgName = strcat(int2str(i),'.png');
imwrite(frame, ImgName);
end
O código acima salvará todos os quadros presentes no vídeo como imagens com formato de arquivo .png
dentro do mesmo diretório do arquivo de script. Você também pode alterar o nome do arquivo e a extensão do arquivo da imagem. Se você não deseja extrair todos os quadros do vídeo e deseja extrair apenas o primeiro quadro do vídeo. Para fazer isso, você deve alterar o segundo argumento da função read()
para 1 como read(v,1)
. Se você quiser extrair o último quadro do vídeo, você deve alterar o segundo argumento para inf
como read(v,inf)
. Se quiser extrair um intervalo específico de quadros do vídeo, você deve alterar o segundo argumento para vetor. Por exemplo, você pode usar a função read(v,[5 10])
para ler os quadros de 5 a 10 do vídeo v
.