이전 포스팅에서 비디오 파일을 읽어오는 방법을 배웠다
이번에는 비디오파일을 녹화하는 방법을 알아보려 한다
자율주행 시스템은 카메라로부터 실시간으로 받는 영상정보를 인식하여 학습된 모델을 바탕으로 결과를 도출하는 방식인데 그 과정에 가장 핵심이면서 기본인 카메라를 컨트롤하는 방법을 배우는 것이다
1. 라이브러리 임포트
import cv2
import numpy as np
2. 카메라로부터 데이터를 가져온다
cap = cv2.VideoCapture(0)
#모듈 대소문자 주의
#0 : 0번 카메라를 의미
3. 카메라 연결상태 확인
if cap.isOpend() == False :
print('Unable to read camera feed')
카메라가 정상적으로 연결되지 않았다면 해당 문구를 출력하여 안내하도록 if문을 걸어준다
3-1. 카메라 연결상태가 양호하다면
else :
#프레임 정보를 가져온다 : 화면크기를 의미한다
frameWidth = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH)) # 프레임 너비
frameHeight = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) # 프레임 높이
#framewidth = int(cap.get(3))
#frameheight = int(cap.get(4))
output = cv2.VideoWriter('data/videos/output.avi', cv2.VideoWriter_fourcc('M','J','P','G'),10,(frameWidth,frameHeight))
비디오파일 녹화 함수는 아래 표로 정리한다
함 수 | 설 명 |
cv2.VideoWriter(filename, fourcc, fps, frameSize) (파일명, 코덱, 프레임 속도, 프레임사이즈) |
비디오 출력 객체 생성 |
cv2.VideoWriter.write(image) | 비디오 파일에 이미지 출력 |
cv2.VideoWriter.release() | 비디오 출력 객체 해제 |
사용빈도가 높은 fourcc 비디오 코덱 문자도 아래 표로 정리한다
fourcc | 코덱 |
cv2.VideoWriter_fourcc(*'PIM1') | MPEG-1 |
cv2.VideoWriter_fourcc(*'MJPG') | Motion-JPEG |
cv2.VideoWriter_fourcc(*'DIVX') | DIVX 4.0 이후 버전 |
cv2.VideoWriter_fourcc(*'XVID') | XVID, MPEG-4 |
cv2.VideoWriter_fourcc(*'MPEG') | MPEG |
cv2.VideoWriter_fourcc(*'X264') | H.264/AVC |
4. 반복문을 활용하여 비디오 프레임을 캡처해서 받아올 수 있도록 설정한다
while True:
ret, frame = cap.read()
if not ret :
break
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == 27:
break
cap.release()
out.release()
cv2.destroyAllWindows()
2번째 if문에서는 esc(27번)을 누르면 비디오 프레임을 캡처를 중지할 수 있도록 설정해주었다
- 전체코드
import cv2
import numpy as np
#캠으로부터 데이터 가져오기
cap = cv2.VideoCapture(0)
if cap.isOpened() == False:
print('Unable to read camera feed')
else :
#프레임 정보 가져오기 : 화면 크기
frameWidth = int(cap.get(cv2.CAP_PROP_FRAME_WIDTH))
frameHeight = int(cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
# framewidth = int(cap.get(3))
# frameheight = int(cap.get(4))
out = cv2.VideoWriter('data/videos/output.avi', cv2.VideoWriter_fourcc('M','J','P','G'),10
while True:
ret, frame = cap.read()
if not ret :
break
out.write(frame)
cv2.imshow('frame',frame)
if cv2.waitKey(1) & 0xFF == 27:
break
cap.release()
out.release()
cv2.destroyAllWindows()
내,외장 카메라를 연결하여 실행시키면 실제로 카메라가 연결되면서 정상적으로 작동하는 걸 볼 수 있을 것이다
'& 프로그래밍 > & openCV' 카테고리의 다른 글
마우스로 선택한 부분만 출력 및 저장하기(polygon, ROI,openCV) (0) | 2022.05.04 |
---|---|
openCV 프로그래밍 기초(Thresholding) (0) | 2021.05.20 |
openCV 프로그래밍 기초(dnn 모듈) (0) | 2021.04.21 |
openCV 프로그래밍 기초(영상 읽기) (0) | 2021.04.19 |
openCV 프로그래밍 기초(원, 타원 그리기) (0) | 2021.04.16 |