이진 영상의 열기(opening) 연산
이진 연산의 열기 연산은 이진 영상에 침식을 적용하고 팽창을 적용하는 기법이다.
열기 연산을 적용함으로써 작은 돌기, 작은 객체가 사라지고 얇은 연결선이 끊어진다.
열기 연산은 노이즈를 제거하는 용도로 많이 이용한다.
이진 영상의 닫기(closing) 연산
닫기 연산은 팽창을 적용하고 침식을 적용하는 기법이다.
작은 홈, 작은 홀들이 사라지고, 얇은 연결선이 두꺼워 진다.
✔︎ 범용 모폴로지 연산 함수 - cv2.morphologyEx
범용 모폴로지 연산 함수는 침식과 팽창, 열기와 닫기 그 외에도 모폴로지 그래디언트를 지원한다.
dst = cv2.morphologyEx(src, op, kernel, dst=None, anchor=None,
iterations=None, borderType=None, borderValue=None)
- src : 입력 영상
- op : 모폴로지 연산 플래그
- kernel : 커널
- dst : 출력 영상
💬 열기 연산을 이용한 잡음 제거 예제
import sys
import numpy as np
import cv2
src = cv2.imread('rice.png', cv2.IMREAD_GRAYSCALE)
if src is None:
print('Image load failed!')
sys.exit()
# src 영상에 지역 이진화 수행
dst1 = np.zeros(src.shape, np.uint8)
bw = src.shape[1] // 4
bh = src.shape[0] // 4
for y in range(4):
for x in range(4):
src_ = src[y*bh:(y+1)*bh, x*bw:(x+1)*bw]
dst_ = dst1[y*bh:(y+1)*bh, x*bw:(x+1)*bw]
cv2.threshold(src_, 0, 255, cv2.THRESH_BINARY | cv2.THRESH_OTSU, dst_)
cnt1, _ = cv2.connectedComponents(dst1)
print('cnt1:', cnt1)
dst2 = cv2.morphologyEx(dst1, cv2.MORPH_OPEN, None)
#dst2 = cv2.erode(dst1, None)
#dst2 = cv2.dilate(dst2, None)
cnt2, _ = cv2.connectedComponents(dst2)
print('cnt2:', cnt2)
cv2.imshow('src', src)
cv2.imshow('dst1', dst1)
cv2.imshow('dst2', dst2)
cv2.waitKey()
cv2.destroyAllWindows()
'OpenCV' 카테고리의 다른 글
[OpenCV with Python] 이진 영상 처리 : 외곽선 검출 (0) | 2022.02.04 |
---|---|
[OpenCV with Python] 이진 영상 처리 : 레이블링 (0) | 2022.02.04 |
[OpenCV with Python] 이진 영상 처리 : 모폴로지(Morphology) - 침식과 팽창 (0) | 2022.02.04 |
[OpenCV with Python] 이진 영상 처리 : 지역 이진화 - cv2.adaptiveThreshold (0) | 2022.02.04 |
[OpenCV with Python] 이진 영상 처리 : 자동 이진화 - Otsu 방법 (0) | 2022.02.04 |