Computer VIsion/기초(OpenCV)

Opencv를 활용하여 영상을 프레임별로 출력해보기

JackSmith 2024. 8. 23.

이번 챕터에서는 Opencv를 사용하여 영상을 프레임별로 출력해보겠습니다. 그 과정을 순서도로 아래와 같이 나타낼수가 있겠습니다. 

이 과정은 영상 파일을 불러와서 각 프레임을 읽고, 이를 회색조 이미지로 변환하여 출력하는 예제의 흐름을 시각적으로 표현한 것입니다.

 

 

주요 단계를 설명하면 다음과 같습니다.

1.현재 작업 디렉토리를 동영상 파일 위치로 변경

더보기

Python 코드를 실행하기 전에 작업 디렉토리를 영상 파일이 위치한 폴더로 변경합니다. 이를 통해 동영상 파일을 쉽게 불러올 수 있는 데요, 이를 위해 아래에서 상대경로를 통해 위치를 잡아주도록 하겠습니다.

2.지정한 영상파일에 대해 VideoCapture 객체 생성

더보기

Opencv에는 'VideoCapture'라는 생성자가 있어, 이를 통해 객체를 생성하여 동영상파일에 접근, 파일을 열어주고 그 파일로부터 프레임을 읽어올 준비를 해주겠습니다.

 

3.프레임 너비와 높이, FPS 확인

더보기

동영상 파일의 각 프레임의 해상도(너비와 높이) 및 초당 프레임 수(FPS)를 확인합니다. 이 정보는 영상을 처리하거나 출력할때 유용하게 사용됩니다.

 

4.연속적인 프레임 객체에서 프레임 별로 값을 읽음

 

 

5.올바르게 읽혔는가?(True/False 조건문)

 

 

6.회색으로 변환후 출력

 

 

7.'q' 키 입력 확인

 

 

8.작업 완료 후 해제

 

 

 

 

 

실습>

해당 실습은 주피터환경에서 진행되었습니다.

# 모듈 호출
import numpy as np
import cv2 as cv
import os

 

os.getcwd()

 

# VideoCapture 객체 정의
cap = cv.VideoCapture('./../assets/videos/otter.avi')

# 프레임 너비/높이, 초당 프레임 수 확인
width = cap.get(cv.CAP_PROP_FRAME_WIDTH) # 또는 cap.get(3)
height = cap.get(cv.CAP_PROP_FRAME_HEIGHT) # 또는 cap.get(4)
fps = cap.get(cv.CAP_PROP_FPS) # 또는 cap.get(5)
print('프레임 너비: %d, 프레임 높이: %d, 초당 프레임 수: %d' %(width, height, fps))

while cap.isOpened(): # cap 정상동작 확인
    ret, frame = cap.read()
    # 프레임이 올바르게 읽히면 ret은 True
    if not ret:
        print("프레임을 수신할 수 없습니다(스트림 끝?). 종료 중 ...")
        break
    frame = cv.cvtColor(frame, cv.COLOR_BGR2GRAY)
    cv.imshow('Otter', frame)
    if cv.waitKey(42) == ord('q'):
        break
# 작업 완료 후 해제
cap.release()
cv.destroyAllWindows()

 

 

이후 아래 코멘트가 콘솔창에 출력된다.

고찰:
연속적인 프레임을 제공하는 동영상을 각 프레임별로 분석해볼 수 있었다. 이후 각 프레임에 대해 
컴퓨터비전 뿐만 아니라 이미지분류같은 머신러닝 알고리즘, Yolo같은 딥러닝 알고리즘을 확장/적용해볼 수 있을 것 같다.

 

 

 

 

댓글