📌 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/