이전글
1. OpenCV를 이용한 이미지/영상 처리 - 이미지 출력
3. 동영상 출력
동영상 파일 출력 과정
동영상 파일은 이미지 파일과 비슷한 순서로 진행되지만 조금 다른 함수를 사용한다. 동영상 파일의 출력 과정은 파일 읽기 - 프레임 가져오기 - 출력창 정의하기 - 사용자키 지정 - 자원해제 - 창 닫기 순서이다. 동영상을 프레임 단위로 출력하기 때문에 while 문을 사용하여 반복한다.
1 ) 파일 읽기
file_name = cv2.VideoCapture('path')
입력받은 경로(path)의 파일을 "file_name"으로 읽어온다.
2 ) 프레임 가져오기
while file_name.isOpened():
ret, freame = file_name.read()
if not ret:
print("더 이상 가져 올 프레임이 없음")
break
이미지와 다르게 동영상을 출력할 때는 프레임 단위로 가져온다. 따라서 프레임들을 가져오기 위해 파일을 가져오는 데 성공했다면 while 반복문 내에서 read() 함수를 통해 파일(file_name)의 load 성공여부와 프레임을 각각 ret과 fream으로 가져온다. 만약 더 이상 가져올 프레임이 없는 경우(if not ret) 반복문을 종료한다.
3 ) 출력창 정의하기
# 반복문 계속
cv2.imshow('window_name', frame)
프레임을 가져오는 반복문 안에서 가져 올 수 있는 프레임이 있는 경우에는 "window_name"이라는 창 이름으로 frame이란 프레임을 읽어온다.
4 ) 사용자키 지정
if cv2.waitKey(ms) == ord('key'):
print("사용자의 입력에 의해 종료합니다.")
break
프레임을 가져오는 반복문 안에서 사용자가 'key'를 입력하면 이를 아스키코드로 변환하여 사용자의 입력에 의한 종료를 실행한다.
5 ) 자원 해제
file_name.release()
사용한 자원을 해제한다.
6 ) 창 닫기
cv2.destroyAllWindows()
모든 창을 닫는다.
위 과정을 바탕으로 같은 폴더 안에 있는 video.mp4파일을 video라는 창에 출력하고 사용자 키인 "q"를 입력 해 창을 닫는 과정을 다음과 같이 나타낼 수 있다.
import cv2
# 1. 파일 읽기
cap = cv2.VdieoCapture('video.mp4')
# 2. 프레임 가져오기
while cap.isOpened():
ret, frame = cap.read()
if not ret:
print("더 이상 가져올 프레임이 없습니다.")
break
# 3. 출력창 정의하기
cv2.imshow('video', frame)
# 4. 사용자키 지정
if cv2.waitKey(25) == ord("q"):
print("사용자의 입력에 의해 종료합니다.")
break
# 5. 자원 해제
cap.release()
# 6. 창 닫기
cv2.destroyAllWindows()
동영상 출력 종료
동영상 출력이 종료되는 경우는 1) 동영상에서 더 이상 가져올 프레임이 없는 경우와 2) 사용자가 영상 중간에 사용자 key를 입력한 경우이다. 동영상에서 더 이상 가져올 프레임이 없다는 것은 말 그대로 영상이 끝났기 때문에 자동으로 반복문이 종료되어 창이 닫히는 경우이다. 사용자가 영상 중간에 사용자 key를 입력하는 것은 위의 명령문에서 사용자가 "q"를 입력하면 반복문을 종료하고 창을 닫아 동영상 출력이 종료됨을 의미한다.
동영상에서 더 이상 가져올 프레임이 없는 경우
사용자가 영상 중간에 사용자 key를 입력한 경우
4. 카메라 출력
카메라 출력 과정
카메라 출력의 경우 동영상 출력과정과 거의 비슷하다. 동영상의 경우 동영상 pc에서 영상 파일을 불려왔다면 카메라 출력은 사용자의 장치로 부터 연속적으로 프레임을 가져와 출력하는 과정이다. 따라서 카메라를 출력하는 과정은 동영상을 출력하는 과정에서 첫번째로 하는 파일 읽기 대신 장치를 읽어와 출력하는 것을 제외하고는 같은 과정을 거친다.
동영상 출력 과정
파일 읽기 - 프레임 가져오기 - 출력창 정의하기 - 사용자키 지정 - 자원해제 - 창 닫기
카메라 출력 과정
장치 읽기 - 프레임 가져오기 - 출력창 정의하기 - 사용자키 지정 - 자원해제 - 창 닫기
1 ) 장치 읽기
file_name = cv2.VideoCapture(n)
사용자의 n번째 장치를 "file_name"으로 읽어온다. 여기서 n은 Device Id를 의미하여 첫번째 장치는 0, 그 다음 장치는 1, 과 같이각각의 장치를 순서대로 정의하며 이러한 장치들을 여러개 불러올 수 있다.
위 과정을 바탕으로 카메라로 camera라는 창에 출력하고 "q"키를 입력해 창을 닫는 과정을 다음과 같이 나타낼 수 있다
import cv2
# 1. 장치 읽기
cap = cv2.VideoCapture(0) # 0번째 카메라 장치
# 장치를 읽는데 실패한 경우 종료한다.
if not cap.isOpened():
exit()
while True:
# 2. 프레임 가져오기
ret, frame = cap.read()
if not ret:
break
# 3. 출력창 정의하기
cv2.imshow("camera", frame)
# 4. 사용자키 지정
if cv2.waitKey(1) == ord("q"):
break
# 5. 자원 해제
cap.release()
# 6. 창 닫기
cv2.destroyAllWindows()
'Study > ML | DL' 카테고리의 다른 글
[Python] OpenCV를 이용한 이미지/영상 처리 - 파일 저장 (0) | 2023.05.17 |
---|---|
[Python] OpenCV를 이용한 이미지/영상 처리 - 텍스트 (0) | 2023.05.12 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 도형그리기2(원형, 사각형, 다각형) (0) | 2023.05.04 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 도형그리기1(영역색칠, 직선) (0) | 2023.05.03 |
[Python] OpenCV를 이용한 이미지/영상 처리 - 이미지 출력 (0) | 2023.05.01 |