- 이진 영상의 열기(opening) 연산
- 이진 영상의 닫기(closing) 연산
- 범용 모폴로지 연산 함수
cv2.morphologyEx(src,op,kernel,dst=None,anchor=None,iteration=None,borderType=None,borderValue=None) -> 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영상에 지역 이진화 수행(local_th.py참고(지역이진화 구현 부분))
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) #영상 안에 있는 흰색 덩어리들의 개수를 return 해준다
#노이즈가 정확한 갯수를 세는것을 방해한다
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()
'Computer Vision > opencv(python)' 카테고리의 다른 글
[45] 7) 외곽선 검출 (0) | 2021.03.23 |
---|---|
[44] 6) 레이블링 (0) | 2021.03.23 |
[42] 4) 모폴로지 (1): 침식과 팽창 (0) | 2021.03.23 |
[41] 3) 지역 이진화 (0) | 2021.03.23 |
[40] 2) 자동 이진화: otsu 방법 (0) | 2021.03.23 |