erode(침식), dilate(팽창)
- erode는 모래사장에서 모래가 물에 조금씩 쓸려가 침식 되듯이, 커널에서 1의 영역이 사라져 가는 것을 말한다.
- erode는 커널안에 하나의 1이라도 존재하게 된다면 0으로 표시한다.
- dilate는 erode의 반대의 개념이라고 생각하면된다.
|
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)
'IT > 영상 처리' 카테고리의 다른 글
[논문 분석] VGGnet / Receptive filed - VERY DEEP CONVOLUTIONAL NETWORKS FOR LARGE-SCALE IMAGE RECOGNITION (0) | 2018.10.15 |
---|---|
[Python_OpenCV] Crop (0) | 2018.09.18 |
[Python_OpenCV] Gaussian, Bilateral, Median flter (0) | 2018.09.06 |
[Python_OpenCV] 지정경로에서 이미지 파일 읽어오기 (0) | 2018.08.08 |
[Python_OpenCV] Templete Matching(템플릿 매칭) (0) | 2018.07.22 |