코드 11-4의 open_close() 함수 실행 결과를 그림 11-12에 나타냈습니다. 그림 11-12(a)는 입력 영상으로 사용한 milkdrop.bmp 파일이고, 그림 11-12(b)는 오츠 알고리즘으로 이진화한 bin 영상입니다. 그림 11-12(c)는 열기 연산을 수행한 결과이며, bin 영상의 우측 하단에 있던 자잘한 한두 픽셀 영역이 효과적으로 제거된 것을 확인할 수 있습니다. 그림 11-12(d)는 닫기 연산을 수행한 결과이며, 흰색 객체 내부의 한두 픽셀짜리 구멍이 사라진 것을 볼 수 있습니다.
▲ 그림 11-12 이진 영상의 열기와 닫기 예제 프로그램 실행 결과
Note
이진 영상의 열기와 닫기 연산은 erode()와 dilate() 함수를 사용하여 쉽게 구현할 수 있습니다. 예를 들어 이진 영상 src가 있을 경우, 다음 코드는 열기 연산 결과를 dst에 저장합니다.
Mat dst; erode(src, dst, Mat()); dilate(dst, dst, Mat());
이 코드에서 erode() 함수의 입력은 src, 출력은 dst 영상이고, dilate() 함수는 입력과 출력이 모두 dst 영상입니다. 실제로 morphologyEx() 함수 내부에서도 이와 같이 erode() 함수와 dilate() 함수를 차례대로 호출하여 열기 연산을 수행합니다.