해당 포스트는 "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 행렬로 추출한다.

+ Recent posts