728x90
https://webnautes.tistory.com/1257
OpenCV Python 강좌 - 모폴로지 연산 (Morphological Operations)
OpenCV에서 제공하는 Erosion, Dilation, Opening, Closing 연산하는 함수들을 다룹니다. 보통 바이너리 이미지(Binary Image)에서 흰색으로 표현된 오브젝트의 형태를 개선하기 위해 사용됩니다. 마지막 업데
webnautes.tistory.com
을 먼저보고오는게 이해가 더 잘됨
1. threshold
경계면 구분을 원활하게 진행함
import cv2
import matplotlib.pyplot as plt
import numpy as np
image_path= "./data/a.png"
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
"""
230보다 큰 값은 모두 255로 설정되고 작은값은 0으로 (흰색으로 바뀜)
"""
_, mask = cv2.threshold(image, 230, 255, cv2.THRESH_BINARY_INV)
image_list = np.hstack([
image,
mask
])
plt.imshow(image_list, 'gray')
plt.show()

2. 확장 침식 실험 - 02
import cv2
import matplotlib.pyplot as plt
import numpy as np
image_path= "./data/a.png"
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
_, mask = cv2.threshold(image, 230, 255, cv2.THRESH_BINARY_INV)
kernel = np.ones((3,3), np.uint8)
dilation = cv2.dilate(mask, kernel, iterations=2) # iterations 반복횟수
erosion = cv2.erode(mask, kernel)
image_list = np.hstack([
image,
mask,
dilation, # 팽창
erosion # 침식
])
plt.imshow(image_list, 'gray')
plt.title('org img to mask, dilation, erosion')
plt.show()

image_path= "./data/a.png"
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
_, mask = cv2.threshold(image, 230, 255, cv2.THRESH_BINARY_INV)
kernel = np.ones((3,3), np.uint8)
dilation = cv2.dilate(mask, kernel, iterations=2) # iterations 반복횟수
erosion = cv2.erode(mask, kernel)
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
closing = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
image_list = np.hstack([
image,
mask,
dilation,
erosion,
opening,
closing
])
plt.imshow(image_list, 'gray')
plt.title('org img to mask, dilation, erosion, opening, closing')
plt.show()

3. 확장 침식 실험 - 03
image_path= "./data/a.png"
image = cv2.imread(image_path, cv2.IMREAD_GRAYSCALE)
_, mask = cv2.threshold(image, 230, 255, cv2.THRESH_BINARY_INV)
kernel = np.ones((3,3), np.uint8)
dilation = cv2.dilate(mask, kernel, iterations=2) # iterations 반복횟수
erosion = cv2.erode(mask, kernel)
opening = cv2.morphologyEx(mask, cv2.MORPH_OPEN, kernel)
closing = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
mg = cv2.morphologyEx(mask, cv2.MORPH_GRADIENT, kernel) # 팽창과 침식의 차 / 경계, 윤곽선, 테두리 등을 추출에 주로 쓰임
th = cv2.morphologyEx(mask, cv2.MORPH_TOPHAT, kernel) # 이미지의 밝은 영역에서 뚜렷한 경계를 강조
image_list = np.hstack([
image,
mask,
dilation,
erosion,
opening,
closing
])
image_list_01 = np.hstack([
mg,
th
])
plt.imshow(image_list, 'gray')
plt.title('org img to mask, dilation, erosion, opening, closing')
plt.show()
plt.imshow(image_list_01, 'gray')
plt.title('org img to mg, th')
plt.show()

728x90
'ComputerVision > [CV]' 카테고리의 다른 글
[CV] 영상 기본 세팅 3 (filter이해하기 feat, kalman) (1) | 2023.06.12 |
---|---|
[CV] 영상 기본 세팅 2 (객체추적) (0) | 2023.06.12 |
[CV] 이미지 기본세팅 7 (필터효과) (0) | 2023.06.08 |
[CV] 이미지 기본세팅 6 (머신러닝 특성 만들기-flatten()) (0) | 2023.06.08 |
[CV] 이미지 기본세팅 4 (이미지 회전, 상하좌우반전) (1) | 2023.06.08 |