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



※ cvarrToMat 함수

Mat cvarrToMat(const CvArr* arr, bool copyData=false, bool allowND=true, int coiMode=0)

: OpenCV의 C API 구조체인 IplImage, CvMat의 입력 arr을 Mat 클래스로 변환 후 반환한다. copyData가 false일 경우 arr의 데이터를 복사하지 않고 공유하면 true일 경우 arr의 데이터를 복사한 후 arr의 데이터는 파괴한다. allowND = true 이면 CvMatND를 2D Mat로 변환한다. 입력 arr이 IplImage 일 때 coiMode =0 이고 COI(관심 채널)가 설정되어 있다면 오류가 발생한다. coiMode=1 이면 오류는 발생하지 않고 arr의 헤더를 반환한다. 


※ flip 함수

void flip(InputArray src, OutputArray dst, int flipCode)
: 입력 영상 src를 flipCode에 따라 수평 또는 수직으로 두집어 dst에 저장한다. flipCode가 0이면 수평을 기준으로 뒤집고, 1이면 수직을 기준으로 뒤집는다. -1이면 수평, 수직을 기준으로 뒤집는다. 

※ repeat 함수

Mat repeat(InputArray src, int ny, int nx)
: 입력 src를 수평으로 nx번, 수직으로 ny번 반복 복사한 Mat형 변수를 반환한다.


※ merge, split 함수

void merge(InputArrayOfArrays mv, OutputArray dst)
: 여러 개의 단일 채널 입력 mv을 다중채널 출력 dst 행렬로 만든다. dst의 채널 수는 mv의 채널 개수의 합과 같다.

void split(InputArray m, OutputArrayOfArrays mv)
: 다중 채널 입력 행렬 m을 행렬의 벡터인 출력 mv로 분리한다.


※ Channel 관련 함수

void mixChannels(const vector<Mat>& src, vector<Mat>& dst, const int* fromTo, size_t npairs)
void mixChannels(const Mat* src, size_t nsrcs, Mat* dst, size_t ndsts, const int* fromTo, size_t npairs)
: 채널을 분리/합성 할 수 있다. src에서 dst로 fromTo에 명시된 채널 입력/출력 쌍에 의해서 채널이 분리/합성된다. fromTo의 짝수 인덱스는 src의 채널 인덱스이고 홀수 인덱스는 dst의 채널 인덱스이다. nsrcs는 src의 행렬 개수, ndsts는 dst의 행렬 개수, npairs는 fromTo 배열 쌍의 개수이다. 

ex)
int fromTo[] = {0,0,1,1,2,2};
mixChannel(&srcImage, 1, outImage, 3, fromTo, 3);
//split(srcImage, outImage);

위 코드에서 mixChannel의 역할과 split의 역할은 같다.


void insertImageCOI(InputArray coiimg, CvArr* arr, int coi=-1)

: c++ 스타일 coiimg 행렬을 C API의 CvArr(IplImage, CvMat) 자료형의 arr의 coi 채널로 복사한다.


void ExtractImageCOI(const CvArr* arr, OutputArray coiimg, int coi=-1)

; C API의 CvArr 자료형의 arr에서 coi에 명시된 채널을 c++ 스타일 coiimg 행렬로 추출한다.

해당 포스트는 "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