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

+ Recent posts