파이썬으로 영상처리_팽창, 침식 그리고 열림과 닫힘

k_minseokVv·2024년 1월 8일
0

OpenCV - Python

목록 보기
10/13

강의 출처 : https://www.youtube.com/watch?v=XK3eU9egll8

팽창(Dilation)

  • 흰색 영역 외곽 픽셀 주변에 흰색을 추가해줌, 이미지를 확장해 작은 구멍을 채움
import cv2
import numpy as np

kernel = np.ones((3,3),dtype=np.uint8) #1로 이루어진 3,3행렬 생성

img = cv2.imread('dilate.png', cv2.IMREAD_GRAYSCALE)
dilate1 = cv2.dilate(img, kernel, iterations=1) #iterations : 반복횟수 많이 할 수 록 많은 작업을 함
dilate2 = cv2.dilate(img, kernel, iterations=2)
dilate3 = cv2.dilate(img, kernel, iterations=10)

cv2.imshow('gray',img)
cv2.imshow('dilate1',dilate1)
cv2.imshow('dilate2',dilate2)
cv2.imshow('dilate3',dilate3)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 비교 & 결과

침식(Erosion)

  • 이미지를 깎아 노이즈를 제거
  • 흰색 영역의 외곽 픽셀을 검은색으로 변경
  • 팽창의 반대
import cv2
import numpy as np

kernel = np.ones((3,3),dtype=np.uint8)
img = cv2.imread('erode.png',cv2.IMREAD_GRAYSCALE)

erode1 = cv2.erode(img, kernel, iterations=1)
erode2 = cv2.erode(img, kernel, iterations=2)
erode3 = cv2.erode(img, kernel, iterations=3)

cv2.imshow('gray',img)
cv2.imshow('erode1',erode1)
cv2.imshow('erode2',erode2)
cv2.imshow('erode3',erode3)

cv2.waitKey(0)
cv2.destroyAllWindows()
  • 비교 및 결과

  • 쉽게 말해서

팽창은 검은색을 하얀색으로

침식은 하얀색을 검은색으로

열림과 닫힘

1. 열림(Opening) : 침식 후 팽창 , 깎아서 노이즈 제거 후 살찌움

  • 코드 : dilate(erode(image))
import cv2
import numpy as np

img = cv2.imread('erode1.png',cv2.IMREAD_GRAYSCALE)
kernel = np.ones((3,3),dtype=np.uint8)

erode = cv2.erode(img, kernel,iterations=3)
dilate = cv2.dilate(erode, kernel, iterations=3)

cv2.imshow('gray',img)
cv2.imshow('erode',erode)
cv2.imshow('dilate',dilate)
cv2.waitKey(0)
cv2.destroyAllWindows()
  • 결과

2. 닫힘(Closing) : 팽창 후 침식, 구멍을 메운 후 다시 깎음

  • 코드 : erode(dilate(image))
import cv2
import numpy as np

img = cv2.imread('dilate1.png',cv2.IMREAD_GRAYSCALE)
kernel = np.ones((3,3),dtype=np.uint8)

dilate = cv2.dilate(img, kernel, iterations=8)
erode = cv2.erode(dilate, kernel,iterations=1)
erode2 = cv2.erode(dilate, kernel,iterations=8)

cv2.imshow('gray',img)
cv2.imshow('dilate',dilate)
cv2.imshow('erode',erode)
cv2.imshow('erode2',erode2)

cv2.waitKey(0)
cv2.destroyAllWindows()
  • 결과
profile
C++, Python 활용 중

0개의 댓글