DEEP.I - Lab

오프라인 공간의 지능화를 꿈꾸는 딥아이 연구실입니다.

Matlab

[Matlab] 이미지로 동영상 만들기 및 동영상의 프레임을 이미지로 저장하기

Jinsoo Kim 2021. 1. 11. 16:31
반응형

Concept

일반적으로 YOLO, SSD, Faster R-CNN 등의 CNN 기반의 객체 탐지 알고리즘을 다루는 경우에는 단일 이미지로 학습을 진행하게 됩니다. 모델 최적화를 통해 학습을 완료한 후 AP(Average Precision)를 측정하는 과정을 통해 학습을 마무리하는데 테스트 과정에서 객체 탐지 모델의 성능을 시각화하는 경우 이미지를 동영상으로 변환해야 하는 상황이 생깁니다. 그리고 학습에 사용할 데이터셋을 구축하기 위해 동영상의 프레임에서 이미지를 추출하기도 합니다.

 

이번 포스트는 위와 같은 상황에서 이미지를 비디오로, 비디오를 이미지로 변환해주는 매트랩 소스 코드입니다.

자율주행 벤치마킹 데이터셋 KITTI를 활용하여 간단하게 소스 코드를 작성해보겠습니다.

 

1. 이미지를 비디오로 변환

 

이미지를 비디오로 변환하는 소스 코드는 일반적인 파일 입출력 코드와 유사합니다.

dList_img = dir(strcat('이미지가 저장된 디렉토리', '*.png'));

 

먼저 '이미지가 저장된 디렉토리'를 설정하여 해당 폴더의 특정 확장자(png)의 파일들을 읽어 디렉토리 변수를 설정합니다. 이미지들의 파일명은 프레임 순서에 따라 정렬되어있어야 합니다.

 

그리고 불러온 이미지로 생성할 '비디오를 저장할 디렉토리 + 파일명'과 프레임레이트를 설정합니다. 예를 들어 D드라이브에 movie라는 이름으로 비디오를 저장한다면 소스 코드는 vid = VideoWriter('D:/movie.avi')가 됩니다.

그리고 프레임레이트가 높을수록 동영상의 속도가 빨라집니다.

vid = VideoWriter('비디오를 저장할 디렉토리 + 파일명');
vid.FrameRate = 10;

 

마지막으로 비디오를 저장하기 위해 파일을 열고 이미지 디렉토리 변수에서 이미지들을 불러옵니다. 이미지들은 비디오 파일에 작성되며 쓰기가 완료된 후에는 파일을 닫아줍니다.

open(vid) 
for i = 1 : length(dList_img) 
    img = imread(strcat('이미지가 저장된 디렉토리', dList_img(i).name)); 
    writeVideo(vid, img); 
end 
close(vid)

 

최종코드

dList_img = dir(strcat('이미지가 저장된 디렉토리', '*.png')); 
vid = VideoWriter('비디오를 저장할 디렉토리 + 파일명');
vid.FrameRate = 10;

open(vid) 
for i = 1 : length(dList_img) 
    img = imread(strcat('이미지가 저장된 디렉토리', dList_img(i).name)); 
    writeVideo(vid, img); 
end 
close(vid)

 

 

 

 

2. 비디오를 이미지로 변환

 

이미지를 비디오로 변환하는 소스 코드는 1번의 과정을 반대로 진행합니다.

vid = VideoReader('비디오가 저장된 디렉토리 + 파일명');
numFrames = vid.NumberOfFrames;

 

 

먼저 비디오를 불러온 후에 프레임 개수를 카운팅합니다.

for t = 1 : numFrames 
    img = read(vid, t);  
    imwrite(img, strcat('이미지를 저장할 디렉토리', sprintf('%03d', t), '.png')); 
end

 

그리고 for문을 사용해서 모든 프레임을 이미지 저장경로에 하나씩 저장합니다.

 

최종코드

clear all 
vid = VideoReader('비디오가 저장된 디렉토리 + 파일명');
numFrames = vid.NumberOfFrames; 

for t = 1 : numFrames 
    img = read(vid, t);  
    imwrite(img, strcat('이미지를 저장할 디렉토리', sprintf('%03d', t), '.png')); 
end

 

Contact Us

Your Best AI Partner DEEP.I
AI 바우처 공급 기업
객체 추적 및 행동 분석 솔루션 | 제조 생산품 품질 검사 솔루션 | AI 엣지 컴퓨팅 시스템 개발

인공지능 프로젝트 개발 외주 및 상담
E-mail: contact@deep-i.ai
Site: www.deep-i.ai
 

딥아이 DEEP.I | AI 기반 지능형 기업 솔루션

딥아이는 AI 기술의 정상화라는 목표를 갖고, 최첨단 딥러닝 기술 기반의 기업 솔루션을 제공하고 있으며, 이를 통해 고도의 AI 기반 객체 탐지, 분석, 추적 기능을 통합하여 다양한 산업 분야에

deep-i.ai

 

 

반응형