C++ OpenCV 모폴로지 침식, 팽창

사용 버전: OpenCV 4.5.2
사용 프로그램: Microsoft Visual Studio 2019 16.9.4

openCV 모폴로지 침식, 팽창하는 법을 알아보겠습니다.


영상의 팽창은 흰색 픽셀을 늘리는 역할을 합니다.
영상의 침식은 흰색 픽셀을 줄이는 역할을 합니다.
영상의 열기는 침식 후, 팽창을 실행하여 노이즈를 어느 정도 제거합니다.
영상의 닫기는 팽창 후, 침식을 실행하여 홀을 어느 정도 제거합니다.

사용할 이미지는 다음과 같습니다.





침식(Erosion)을 하기 위해서는 erode() 함수를 사용합니다.

괄호 안에는 InputArray(src), OutputArray(dst), InputArray(kernel), Point(anchor), int(iterations), int(borderType), const Scalar(&borderValue) 따위가 들어갑니다.

src에는 원본 영상이 들어갑니다.

dst에는 출력 영상이 저장될 Mat이 들어갑니다.

kernel은 침식 영상을 만드는데 사용할 커널입니다. Mat()을 사용하면 기본 내장 커널을 사용합니다.

anchor는 커널에서 값이 추출될 곳인데, 기본은 (-1, -1)로 가운데를 가리킵니다.

iterations는 반복할 횟수입니다.

borderType은 커널이 닿지 않는 가장자리 부분에 대한 정의입니다. 기본으로 BORDER_CONSTANT를 사용합니다.

borderValue는 커널이 닿지 않는 가장자리 부분에 대한 값 정의입니다. 기본으로 morphologyDefaultBorderValue()를 사용합니다.






기본 커널로 5 번 반복을 돌린 결과입니다.





사용자 정의 kernel을 만들기 위해서는 getStructuringElement() 함수를 사용합니다.

getStructuringElement() 괄호 안에는 int(shape), Size(ksize), Point(anchor)가 들어갑니다.






shape에는 MORPH_RECT, MORPH_MORPH_CROSS, MORPH_ELLIPSE가 들어갑니다.

RECT은 사각형 모양으로 만들고, CROSS는 십자가 모양, ELLIPS는 타원 모양으로 1이 들어간 모양입니다.













만든 Kernel로 3번 반복 실행한 결과입니다.





팽창(Dilation)을 사용하기 위해서는 dilate()를 사용합니다.

괄호 안에는 InputArray(src), OuputArray(dst), InputArray(kernel), Point(anchor), int(iterations), int(borderType), const Scalar(&borderValue) 따위가 들어갑니다.

변수 설명 erode()와 동일합니다.











영상의 열기는 침식(Erosion) 후, 팽창(Dilation)을 실행하면 됩니다.

영상의 닫기는 팽창(Dilation) 후, 침식(Erosion)을 실행하면 됩니다.


끝.



카테고리: C++, OpenCV


댓글

이 블로그의 인기 게시물

Python OpenCV 빈 화면 만들기

Python urllib.parse.quote()

Python bytes.fromhex()

Android AVD Ram size change

Forensics .pyc 파일 .py로 복구하기

Android Minimum touch target size

KiCad 시작하기 7 (FreeRoute 사용하기 2)

Android Notification with Full Screen

KiCad 시작하기 2 (PCB 만들기)