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



※ 모폴로지 연산

- Mat getStructuringElement(int shape, Size ksize, Point anchor=Point(-1,-1))

: 모폴로지 연산을 위한 크기 ksize, 모양 shape 요소값 1의 마스크를 반환한다. shape는 다음과 같은 값들이 있다. 만약 shape가 MORPH_RECT이라면 사각형 마스크를 갖는다. MORPH_ELLIPSE라면 ksize의 사각형에 내접한 타원 모양을 갖는 마스크를 갖는다. MORPH_CROSS라면 anchor.x와 anchor.y를 중심으로 십자형 모양을 가진다.


- void erode(InputArray src, OutputArray dst, InputArray kernel, Point anchor = Point(-1,-1), int iterations=1, int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue())

: src를 kernel 마스크를 통해 침식 연산을 iterations 번 수행해 dst에 저장한다. 


- void dilate(InputArray src, OutputArray dst, InputArray kernel, Point anchor = Point(-1,-1), int iterations=1, int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue())

: src를 kernel 마스크를 통해 팽창 연산을 iterations 번 수행해 dst에 저장한다. 



- void morphologyEx(InputArray src, OutputArray dst, int op, InputArray kernel, Point anchor = Point(-1,-1), int iterations=1, int borderType = BORDER_CONSTANT, const Scalar& borderValue = morphologyDefaultBorderValue())

: src를 kernel 마스크를 통해 op에 해당하는 연산을 iterations번 수행해 dst에 저장한다. op의 값들은 다음과 같다.

1. op = MORPH_OPEN : dst = dilate(erode(src, kernel), kernel)

2. op = MORPH_CLOSE : dst = erode(dilate(src, kernel), kernel)

3. op = MORPH_GRADIENT : dst = dilate(src, kernel) - erode(src, kernel)

4. op = MORPH_TOPHAT : dst = src - open(src, kernel)

5. op = MORPH_BLACKHAT : dst = close(src, kernel) - src

+ Recent posts