-
[OpenCV 튜토리얼] 2. 비디오 캡쳐와 화면 표시Python/OpenCV 2019. 7. 9. 22:39SMALL
비디오는 사진의 연속이라는 점을 이해하면
OpenCV의 비디오 출력을 구현하기 수월해진다.
비디오 자체는 압축되어 인코딩 되어있어 다시 디코딩을 해야
하나 하나의 프레임(이미지)을 얻을 수 있다.
프레임은 이미지 한 장과 같으며
프레임이 연속되어 하나의 시퀀스를 만들게 되고
시퀀스가 모여 하나의 영상(비디오)이 된다고 생각하면 될 것 같다.
OpenCV에서는 cv2.VideoCapture() 함수로
비디오 파일이나 카메라를 개방하게 되고
cv2.VideoCapture.read() 함수로
프레임 하나 하나를 캡쳐하여 영상으로 처리하게 된다.
기본적인 윈도우 화면에 영상을 띄우는 작업을 구현해보자.
1. 모듈 임포트와 영상의 객체 생성하기
cap1, cap2라는 변수들에 동영상 파일이 있는 경로를 설정해 준 VideoCapture 함수로
객체를 생성해주고, 영상의 width, height를 임의의 숫자로 설정해준다.
(frame사이즈를 CAP_PROP_FRAME_WIDTH, CAP_PROP_FRAME_HIGHT 함수값을
int로 변환해 영상 자체 사이즈를 출력 크기로 설정할 수도 있다.)
cap1의 무료 영상은 https://www.pexels.com/ko-kr/videos/ 에서 다운 받았고
cap2의 영상은 제주도 삼성혈에서 직접 촬영한 것이다.
2. 무한루트 while문을 이용해 각 동영상의 프레임들을 cap.read()함수로 캡쳐해준다.
if 문에서 retval, ret (리턴 값, 프레임 캡쳐)이 없다면(값을 얻는 것을 실패한다면)
break문을 이용해 반복문을 종료시킨다.
준비된 영상이 다 끝나고 대기시간 10ms를 부여하고
key == 27 -> 키보드 Esc를 누르면 모든 윈도우 창이 종료되게 된다.
[전체 코드]
실행 결과
뒤의 영상이 frame을 나타내는 cap1, Jelly fish.mp4 영상이고
앞의 영상이 fram을 나타내는 cap2, 삼성혈.mp4 영상이다.
두 영상이 실행되는 것을 확인했다면,
Esc 버튼을 눌러 윈도우 창을 종료시킬 수 있다.
OpenCV라는 프레임워크 자체가 함수 구현이 편하게 되어있어
영상의 프레임을 캡쳐하고 이를 반복문으로 연속해서 재생할 수 있다는 점만 이해한다면
그리 어렵지 않은 작업이 될 것 같다.
[참고 문헌]
1. OpenCV reference
2. 김동근(2018), "Python으로 배우는 Open CV 프로그래밍", 가메출판사
LIST'Python > OpenCV' 카테고리의 다른 글
[OpenCV 튜토리얼] 5. 관심영역 ROI(Region Of Interest) (0) 2020.11.24 [OpenCV 튜토리얼] 4. 마우스 및 트랙바 이벤트 처리 (0) 2020.11.17 [OpenCV 튜토리얼] 3. 도형 그리기 및 문자열 출력하기 (0) 2020.11.17 [OpenCV 튜토리얼] 1. OpenCV 영상(이미지) 입출력 (0) 2019.06.17 댓글