해당 포스트는 "OpenCV로 배우는 영상 처리 및 응용", "C++ API OpenCV 프로그래밍" 책의 내용을 요약한 것이다.



※ 키보드 이벤터 처리

int waitKey(int delay = 0)

: delay<=0 이면 키보드에서 키가 눌러질 때까지 무한히 기다린다. delay>0이면 delay 밀리초 동안 기다리다가 키가 눌러지지 않았으면 -1을 반환한다. waitKey 함수는 윈도우 창이 없으면 동작하지 않는다. 반환 값으로는 눌러진 키가 반환된다.


※ 마우스 이벤트 처리

void setMouseCallback(const string& winname, MouseCallback onMouse, void* userdata=0)

: winame 이름을 갖는 윈도우에서 발생하는 마우스 이벤트를 처리할 핸들러 함수를 onMouse로 지정한다. 즉, window_name인 윈도우에서 마우스 이벤트가 발생할 때마다 핸들러로 지정된 onMouse 함수가 호출된다. userdata는 핸들러 함수로 전달된 사용자 정의 인수이다.


void onMouse(int event, int x, int y, int flags, void* userdata)

: setMouseCallback 함수의 이벤트 핸들러로 등록되는 함수로 함수 이름은 마음대로 할 수 있다. 다만 매개변수는 위와 같이 해야한다. event 값으로는 마우스 움직임, 클릭, 더블 클릭 등이 있다. flags 값은 마우스 이벤트가 발생했을 때 Ctrl, Alt, Shift 키를 눌렀는지 확인을 위해 사용한다. userdata는 사용자 인수이다.


※ 트랙바 처리

int createTrackbar(const string& trackbarname, const string& winname, int* value, int count, TrackbarCallback onChange=0, void* userdata=0)

: winname의 윈도우에 trackbarname의 트랙바를 생성한다. value는 트랙바가 생성될 때 슬라이더의 위치, count는 트랙바 슬라이더의 최대 위치값을 나타낸다. onChange는 트랙바 슬라이더가 변경될 때마다 자동 호출되는 핸들러 함수이다.


void onChange(int pos, void* userdata)

; onChange 함수는 트랙바 슬라이더가 변경될 때마다 자동 호출되며, pos는 트랙바의 슬라이더 위치이다. userdata는 사용자 정의 인수이다.


※ 영상 파일 읽기

Mat imread(const string& filename, int flags=1)

: filename에 주어진 파일로부터 flags에 지정된 컬러로 영상을 읽어 Mat 행렬로 반환한다. flags가 IMREAD_ANYDEPTH=2로 설정되면 입력 영상의 깊이에 따라 16비트 또는 32비틑 영상을 반환한다. 설정되지 않으면 깊이를 8비트로 반환한다. flags를 IMREAD_COLOR=1로 설정되면 영상을 항상 컬러 영상으로 변환하여 읽는다. flags를 IMREAD_GRAYSCALE=0으로 설정하면 영상을 그레이스케일 영상으로 변환하여 읽는다. flags가 0보다 작으면 Alpha 채널 포함하여 영상의 상태 그대로 읽는다.


Mat imdecode(InputArray buf, int flags, Mat* dst)

: 메모리의 버퍼로부터 영상을 디코딩해 읽어서 Mat 행렬로 반환한다. buf는 배열 또는 바이트 벡터이다. flags는 imread와 같고 dst는 옵션으로 디코딩된 영상을 저장한다.


※ 영상 파일 쓰기

bool imrwrite(const string& filename, InputArray img, const vector<int>& params = vector<int>())
: 영상 img를 filename에 명시된 파일로 출력한다. 정수 벡터 params는 압축 양식에 사용되는 인수로 (paramId, paramValue)의 쌍으로 명시한다. JPEG 영상은 paramId 값이 IMWRITE_JPEG_QUALITY이고 0~100의 범위를 갖는다. 높은 값일수록 영상의 질이 좋다. PNG 영상은 paramId 값이 IMWRITE_PNG_COMPRESSION이고 0에서 9의 범위를 갖는다. 높은 값일수록 압축률이 좋지만 시간이 많이 소요된다.

bool imencode(const string& ext, InputArray img, vector<uchar>& buf, const vector<int>&params = vector<int>())
: img 영상을 메모리 버퍼 buf로 인코딩한다. ext는 출력 양식을 지정하는 파일 확장자다.


+ Recent posts