728x90
반응형
Python에서 OpenCV를 활용하여 카메라 영상을 파일로 저장하는 방법에 대하여 알아 보겠습니다.
먼저 전체 예제 코드는 다음과 같습니다.
import cv2
import time
CAMERA_ID = 0
FRAME_WIDTH = 640
FRAME_HEIGTH = 480
capture = cv2.VideoCapture(CAMERA_ID)
if capture.isOpened() == False: # 카메라 정상상태 확인
print(f'Can\'t open the Camera({CAMERA_ID})')
exit()
capture.set(cv2.CAP_PROP_FRAME_WIDTH, FRAME_WIDTH)
capture.set(cv2.CAP_PROP_FRAME_HEIGHT, FRAME_HEIGTH)
# Define the codec and create VideoWriter object. The output is stored in 'output.mp4' file.
out = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'XVID'), 30, (FRAME_WIDTH, FRAME_HEIGTH))
prev_time = 0
total_frames = 0
start_time = time.time()
while cv2.waitKey(1) < 0:
curr_time = time.time()
ret, frame = capture.read()
total_frames = total_frames + 1
# Write the frame into the file (VideoWriter)
out.write(frame)
term = curr_time - prev_time
fps = 1 / term
prev_time = curr_time
fps_string = f'term = {term:.3f}, FPS = {fps:.2f}'
print(fps_string)
cv2.putText(frame, fps_string, (10, 30), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 255))
cv2.imshow("VideoFrame", frame)
end_time = time.time()
fps = total_frames / (start_time - end_time)
print(f'total_frames = {total_frames}, avg FPS = {fps:.2f}')
out.release()
capture.release()
cv2.destroyAllWindows()
위 코드를 실행하면, "VideoFrame" 창에 카메라 영상이 표시되면서 동시에 "output.mp4" 파일로 화면에 표시되는 영상이 저장됩니다.
이전 글과 겹치는 부분은 제외하고, 영상을 파일로 저장하기 위하여 새로 추가된 부분을 하나씩 분석해 보겠습니다.
out = cv2.VideoWriter('output.mp4', cv2.VideoWriter_fourcc(*'XVID'), 30, (FRAME_WIDTH, FRAME_HEIGTH))
영상 프레임을 파일로 저장하기 위해서는 VideoWriter 객체를 생성해야만 합니다.
VideoWriter 생성자의 파라미터는 다음과 같습니다. (그 외 몇가지가 더 있지만, 주로 사용하는 생성자는 아래 함수입니다.)
VideoWriter (const String &filename, int fourcc, double fps, Size frameSize, bool isColor=true)
각 파라미터의 의미는 다음과 같습니다.
- filename : 영상 프레임이 저장될 파일명 (문자열)
- fourcc : 영상 코덱 번호. VariationalRefinement_create() 함수 이용
- fps : FPS 실수값
- frameSize : 영상의 폭과 높이 튜플
- isColor : 컬러 영상 여부
fourcc 코덱 번호 값을 구하기 위하여 VariationalRefinement_create() 함수를 이용합니다.
코덱 문자열로 사용할 수 있는 값들은 'DIVX', 'MJPG', 'XVID', 'H264' 등등입니다.
예제에서는 영상을 'XVID' 형식으로 저장하도록 지정하였습니다. FPS는 30으로 설정하였으나, 실수값으로 지정할 수 있습니다.
out.write(frame)
카메라로부터 가져온 영상 프레임을 파일로 기록합니다.
out.release()
사용을 마친 VideoWriter 객체를 반환합니다.
이전 글 : https://hbesthee.tistory.com/1973
다음에는 카메라로부터 가져온 영상을 파일로 저장할 때, 멀티 스레드로 파일 저장을 별도의 스레드에서 처리하는 방법에 대하여 알아보도록 하겠습니다.
참고자료
- "Read, Write and Display a video using OpenCV":https://learnopencv.com/read-write-and-display-a-video-using-opencv-cpp-python/
- "Capture and save webcam video in Python using OpenCV":https://www.codespeedy.com/save-webcam-video-in-python-using-opencv/
- "[파이썬 OpenCV] 동영상 저장하기 - cv2.VideoWriter 클래스":https://deep-learning-study.tistory.com/108
- "cv::VideoWriter Class Reference":https://docs.opencv.org/4.5.5/dd/d9e/classcv_1_1VideoWriter.html
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 내장 함수를 이용한 텍스트 파일 다루기 (0) | 2022.02.09 |
---|---|
[Python] 파일 확장자 분리하기 (0) | 2022.01.09 |
[Python] OpenCV를 활용한 카메라 영상 출력 - 2(FPS 표시) (0) | 2022.01.05 |
[Python] OpenCV 설치 및 카메라 영상 출력 - 1 (0) | 2022.01.04 |
[Python] VS Code 이용 중에 "PSSecurityException" 보안 오류 해결 방법 (0) | 2021.11.24 |