본문 바로가기
IT/영상 처리

[Python_OpenCV] 모폴로지 연산 (morphology)

by 빨강자몽 2018. 9. 8.

erode(침식), dilate(팽창)

- erode는 모래사장에서 모래가 물에 조금씩 쓸려가 침식 되듯이, 커널에서 1의 영역이 사라져 가는 것을 말한다.

- erode는 커널안에 하나의 1이라도 존재하게 된다면 0으로 표시한다.



- dilate는 erode의 반대의 개념이라고 생각하면된다.



원본 이미지erode 결과dilate 결과


erode(침식), dilate(팽창) 코드


import cv2
import numpy as np

# 이미지 읽어오기
img = cv2.imread('ori_img1.jpg')
# 이미지 크기 변환
img = cv2.resize(img, None, fx=0.7, fy=0.7, interpolation=cv2.INTER_AREA)
# 커널 생성
kernel = np.ones((5,5),np.uint8)
# para1 : 이미지, para2 : 커널, para3 : erode 반복 횟수
erode = cv2.erode(img,kernel,iterations = 1)
# para1 : 이미지, para2 : 커널, para3 : dilate 반복 횟수
dilate = cv2.dilate(img,kernel,iterations = 1)

#결과 보기
cv2.imshow("original",img)
cv2.imshow("erode",erode)
cv2.imshow("dilate",dilate)

cv2.waitKey(0)


gradient


- erode 결과와 dilate 결과의 차이를 보여준다.


erode 결과dilate 결과gradient 결과


gradient 실행코드


import cv2 import numpy as np # 이미지 읽어오기 img = cv2.imread('ori_img1.jpg') # 이미지 크기 변환 img = cv2.resize(img, None, fx=0.7, fy=0.7, interpolation=cv2.INTER_AREA) # 커널 생성 kernel = np.ones((5,5),np.uint8) # para1 : 이미지, para2 : 함수 이용, para3 : 커널 gradient = cv2.morphologyEx(img, cv2.MORPH_GRADIENT, kernel) #결과 보기 cv2.imshow("original",img) cv2.imshow("gradient",gradient) cv2.waitKey(0)


opening, closing


- opening의 경우 erode(침식)를 수행하고 이어서 dilate(팽창)을 수행한다.

- closing의 경우 반대로 dilate(팽창)를 수행하고 이어서 erode(침식)를 수행한다.

- 말보다는 직접 이미지를 보면 금방 이해할 수 있다.


원본 이미지opening 결과closing 결과



opening, closing 실행코드


import cv2 import numpy as np # 이미지 읽어오기 img = cv2.imread('ori_img2.jpg') # 이미지 크기 변환 img = cv2.resize(img, None, fx=0.7, fy=0.7, interpolation=cv2.INTER_AREA) # 커널 생성 kernel = np.ones((11,11),np.uint8) # para1 : 이미지, para2 : 함수 이용, para3 : 커널 opening = cv2.morphologyEx(img, cv2.MORPH_OPEN, kernel) # para1 : 이미지, para2 : 함수 이용, para3 : 커널 closing = cv2.morphologyEx(img, cv2.MORPH_CLOSE, kernel) #결과 보기 cv2.imshow("opening.jpg",opening) cv2.imshow("closing.jpg",closing) cv2.waitKey(0)


Top Hat, Black Hat


- topahat은 원본이미지와 opening 결과의 차이를 나타낸다.

- blackhat은 반대로 원본이미지와 closing 결과의 차이를 나타낸다.

- 이또한 말보다는 결과를 보면 쉽게 이해 할 수 있다.


tophat 결과blackhat 결과


Top Hat, Black Hat 실행코드


mport cv2
import numpy as np

# 이미지 읽어오기
img = cv2.imread('ori_img2.jpg')
# 이미지 크기 변환
img = cv2.resize(img, None, fx=0.7, fy=0.7, interpolation=cv2.INTER_AREA)
# 커널 생성
kernel = np.ones((11,11),np.uint8)
# para1 : 이미지, para2 : 함수 이용, para3 : 커널
tophat = cv2.morphologyEx(img, cv2.MORPH_TOPHAT, kernel)
# para1 : 이미지, para2 : 함수 이용, para3 : 커널
blackhat = cv2.morphologyEx(img, cv2.MORPH_BLACKHAT, kernel)

#결과 보기
cv2.imshow("tophat", tophat)
cv2.imshow("blackhat", blackhat)

cv2.waitKey(0)