Computer Vision/opencv(python)

[43] 모폴로지(2): 열기와 닫기

jwjwvison 2021. 3. 23. 14:42
  • 이진 영상의 열기(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