Computer Vision/OpenCV

[openCV] 영상에서 프레임 추출하기

Krrong 2022. 7. 13. 20:10

📌 Intro

기능테스트를 위해 찍어놨던 영상에서 몇 장의 프레임을 가져와야 하는 일이 생겼다. 앞으로도 필요할 것 같은 작업이기 때문에 정리해두려고 한다.



📌 환경

openCV 라이브러리를 사용하고, 프레임을 추출할 영상은 아래 소스코드를 실행할 폴더 내에 있는 images폴더 아래 위치시켰다.



📌 소스코드

import cv2

# 비디오 출력 클래스(cv2.VideoCapture)를 통해 파일 경로의 동영상 파일을 불러옴
capture = cv2.VideoCapture('./images/side laser without tilting.MP4')

count = 0

# 비디오가 성공적으로 열렸다면
while(capture.isOpened()):
    # 동영상 파일을 읽어옴
    ret, image = capture.read()

    # 30프레임마다 하나의 이미지 추출
    if(int(capture.get(1)) % 30 == 0):
        print("Saved frame number : " + str(int(capture.get(1))))

        # 추출된 이미지 저장
        cv2.imwrite(str(count)+'.jpg', image)
        count += 1

capture.release()



📌 설명

  • capture = cv2.VideoCapture('fileName') 파일 경로의 동영상 파일을 openCV의 비디오 출력 클래스를 통해 불러온다.
  • capture.read() 카메라의 상태 및 프레임을 받아온다. ret에는 카메라의 상태가 저장되며 정상 작동할 경우 True를 반환한다. 만약 정상적으로 작동하지 않는다면 False를 반환한다. frame에는 현재 시점의 프레임이 저장된다.
  • capture.get(속성) capture의 속성을 반환한다.
    ex)
    cv2.CAP_PROP_POS_FRAMES : 현재 프레임 개수 cv2.CAP_PROP_FRAME_COUNT : 총 프레임 개수
  • cv2.imwrite('fileName', image) 저장할 image를 fileName 명으로 저장한다.
  • capture.release() VideoCapture 장치를 닫고 메모리를 해제한다.



📌 참고

[1] https://deftkang.tistory.com/182 [2] https://076923.github.io/posts/Python-opencv-4/