이번 포스팅에서는 opencv를 통해 영상 파일과 실시간 캠 영상을 출력하는 방법에 대해 알아보겠습니다.
1. 주요 클래스 및 함수 소개
1) 카메라 객체 생성
VideoCapture 라는 클래스를 통해 캠 영상과 이미 완성되어 있는 영상파일을 출력할 수 있습니다.
(1) 실시간 캠영상
VideoCapture 클래스 인자로 0부터 시작하는 정수 값을 넣습니다.
일반적으로 0은 컴퓨터의 기본 카메라인데요. 카메라가 두 개라면 하나는 0 다른 하나는 1로 설정을 합니다.
둘 중 어느 카메라가 할당될지는 상황에 따라 다를 수 있음으로 체크할 필요가 있습니다.
(2) 영상 파일
앞서 정수를 넣었던 것과는 달리 영상파일 경로를 인자로 넣어주면 됩니다.
일반적으로 VideoCapure 을 통해 생성한 객체는 cap 이라는 변수명을 사용하니 참고 바랍니다.
2) 비디오 캡처 준비 여부 확인
카메라가 정상적으로 연결이 되었다면 True 값을 반환하고, 실패하였다면 False 를 반환하는 함수입니다.
3) 한 프레임씩 받아오기
해당 함수를 통해 영상을 한프레임씩 가져옵니다.
2. 실제 사용 코드
이어서 위 함수들을 통해 실제 영상을 출력하는 예제 코드를 작성해보겠습니다.
각 함수 별 설명은 주석을 통해 달아 놨으니 확인 바랍니다.
cap = cv2.VideoCapture('John_Wick_small.mp4')
if not cap.isOpened(): # 카메라 잘연결되었는지 확인 후 실패했을시 에러메시지와 함께 종료
print('Camera open failed!')
sys.exit()
while True:
ret, frame = cap.read() # 현재 open되어있는 영상에서 한프레임씩 이미지를 가져온다.
# 두개 값을 리턴
# ret => boolean 형태로 영상이 끝나면 False를 반환
# frame은 한프레임 해당하는 영상을 의미 type은 numpy array형태
if not ret: # ret이 False면 자연스럽게 영상이 꺼지도록 세팅
break # 영상이끊기면 while loop를 빠져나온다.
cv2.imshow('frame', frame) # 화면에 한프레임식 보여준다.
# cv2.waitKey(20) 20은 20ms 의미 20ms딜레이를 가지고 다음 프레임을 보여준다.
# 이렇게만 적으면 while loop을 중간에 빠져나올수 없기 때문에 아래와 같은 형태로 많이씀
if cv2.waitKey(20) == 27: #27은 ESC키를 의미 , esc버튼을 누르면 강제로 영상을 중지하겠다는 뜻
break
# if cv2.waitKey(20) == ord('q'): #27은 ESC키 외에 다른 키를 눌렀을때 중지하고 싶으면 ord를 감싸고 다른 키 문자를 넣어주면 됨.
# break
cap.release()
cv2.destroyAllWindows()# 모든 창 닫기
이외에도 Frame이 가지는 여러 가지 정보를 추출할 수 있습니다.
대표적으로 프레임 크기를 알 수 있는데요.
cap.get() 을 통해 가져온 값은 float 값입니다. 그렇기 때문에 int 형태로 변환하여 주로 사용합니다.
이외에도 다양한 속성 값 추출 법이 있으니 문서를 참조하시기 바랍니다.
'머신러닝,딥러닝 > opencv' 카테고리의 다른 글
[opencv] jupyter notebook에서 영상 실행 방법(with ipywidgets) (0) | 2022.12.19 |
---|---|
[파이썬 opencv] 오픈 cv에서 selectroi 사용하는 방법 (0) | 2022.12.09 |
[파이썬 opencv] 오픈 cv에서 yolov3 사용하는 방법 (2) | 2022.10.26 |
[파이썬 opencv] 오픈 cv에서 detection model 실행하는 방법 (0) | 2022.10.21 |
[오픈 cv] 트랙바란? 트랙바 사용방법(for opencv 초보자) (0) | 2022.09.14 |
댓글