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()