1. VideoCapture 클래스
동영상 파일 또는 카메라에서 정지 프레임을 받아오는 클래스
VideoCapture 클래스의 생성자 사용, VideoCapture::open() 멤버 함수 사용을 통해 동영상 파일이나 카메라 사용
동영상 파일의 경우 경로와 파일명, 카메라일 경우 카메라 번호( 0, 1, .. )를 인자로 전달
카메라 또는 동영상 파일 열기를 수행한 후에는 VideoCapture::isOpened() 멤버 함수를 이용해 열기 작업이 성공적으로 수행되었는지 확인 ( bool형으로 true, false 로 반환 )
카메라 사용이 끝나면 VideoCapture::release() 함수를 호출하여 사용하던 자원을 해제해야 함
카메라 또는 동영상 파일로부터 한 프레임의 정지 영상을 받아 오는 방법
VideoCapture::operator >>() 연산자 재정의 사용, VideoCapture::read() 함수 사용
* 컴퓨터에 연결된 기본 카메라로부터 한 프레임의 정지 영상을 받아오는 일련의 과정
VideoCapture cap(0);
Mat frame1, frame2;
cap >> frame1;
cap.read(frame2);
여러 대의 카메라를 연결하고 여러 카메라로부터 동시에 영상을 획득하고 싶다면 VideoCapture::read() 함수보다 VideoCapture::grab() 함수와 VideoCapture::retrieve() 함수를 같이 사용하는 것이 좋다.
( read() 함수는 grab() 함수와 retrieve() 함수가 합쳐진 것이라 볼 수 있는데 수행 시간 때문에 같은 시점의 사진을 획득할 때에는 grab() 함수를 차례대로 호출하고 retrieve() 함수를 차례대로 호출하여 받아오는 것이 좋다. )
현재 열려 있는 카메라 장치 또는 동영상 파일로부터 여러 가지 정보를 받아오기 위해서는 VideoCapture::get() 함수를 사용한다.
* 시스템 기본 카메라를 열고 카메라의 기본 프레임 크기를 확인하는 방법
VideoCapture cap(1);
int w = cvRound(cap.get(CAP_PROP_FRAME_WIDTH));
int h = cvRound(cap.get(CAP_PROP_FRAME_HEIGHT));
VideoCapture::get() 함수는 double 자료형으로 반환하므로 정수형 변수에 프레임 크기를 저장하려면 반올림하여 정수형으로 변환하는 것이 좋다.
VideoCapture::get() 함수와 반대로 현재 열려 있는 카메라 또는 비디오 파일 재생과 관련된 속성 값을 설정할 때에는 VideoCapture::set() 함수를 사용한다.
* video.mp4 파일을 열어서 100번째 프레임으로 이동하는 코드
VideoCapture cap("video.mp4");
cap.set(CAP_PROP_POS_FRAMES, 100);
2. 카메라 입력 처리하기
결과창
3. 동영상 파일 처리하기
결과창
4. 동영상 파일 저장하기
OpenCV는 카메라 및 동영상 파일의 프레임을 받아 오는 기능뿐만 아니라 일련의 프레임을 동영상 파일로 저장하는 기능을 VideoWriter 클래스를 통해 제공한다.
output.avi
'OpenCV' 카테고리의 다른 글
다양한 그리기 함수 (0) | 2020.03.23 |
---|---|
기본 자료형 클래스(4) (0) | 2020.03.21 |
기본 자료형 클래스(3) (0) | 2020.03.20 |
기본 자료형 클래스(2) (0) | 2020.03.10 |
기본 자료형 클래스(1) (0) | 2020.03.10 |