MATLAB을 사용하여 비디오에서 프레임 추출
이 튜토리얼에서는 Matlab의 read()
함수를 사용하여 비디오 프레임을 추출하는 방법에 대해 설명합니다.
MATLAB의 read()
함수를 사용하여 비디오에서 프레임 추출
비디오는 많은 프레임으로 구성됩니다. 즉, 그림으로 구성되어 있으므로 이미지나 프레임이 차례로 반복되면 비디오가 재생되는 것을 보게 됩니다. 예를 들어 비디오가 초당 60프레임으로 구성되어 있다고 가정합니다. 즉, 1초에 60프레임이 생성된다는 의미입니다. 프레임이 너무 빨리 변경되어 재생 중인 비디오만 볼 수 있습니다. 먼저 VideoReader()
함수를 사용하여 Matlab에서 비디오를 읽어야 합니다. 그런 다음 NumberOfFrames
속성을 사용하여 비디오에 있는 총 프레임 수를 찾아야 합니다. 1에서 시작하여 비디오의 최대 프레임 수에서 끝나는 for 루프를 사용할 것입니다. 이제 비디오에 있는 각 프레임을 찾아 subplot()
및 imshow()
함수를 사용하여 플롯에 표시합니다. 예를 들어 Matlab에서 비디오를 읽고 모든 프레임을 추출해 보겠습니다. 아래 코드를 참조하십시오.
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
출력:
위의 코드에서 NPF
변수는 위 그림의 행과 열 수를 설정합니다. imwrite()
함수를 사용하여 각 프레임을 폴더 안에 이미지로 저장할 수도 있습니다. 아래 코드를 참조하십시오.
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
위의 코드는 비디오에 있는 모든 프레임을 스크립트 파일과 동일한 디렉토리에 .png
파일 형식의 이미지로 저장합니다. 이미지의 파일 이름과 파일 확장자를 변경할 수도 있습니다. 비디오에서 모든 프레임을 추출하지 않고 비디오의 첫 번째 프레임만 추출하려는 경우. 그렇게 하려면 read()
함수의 두 번째 인수를 read(v,1)
와 같이 1로 변경해야 합니다. 비디오의 마지막 프레임을 추출하려면 read(v,inf)
와 같이 두 번째 인수를 inf
로 변경해야 합니다. 비디오에서 특정 범위의 프레임을 추출하려면 두 번째 인수를 vector로 변경해야 합니다. 예를 들어 read(v,[5 10])
함수를 사용하여 v
비디오에서 5에서 10까지의 프레임을 읽을 수 있습니다.