728x90
Gradient (cv2.MORPH_GRADIENT)
Gradient 연산은 엣지를 검출할 때 사용합니다.
Gradient = 팽창(dilation) - 침식(erosion)
Tophat (cv2.MORPH_TOPHAT)
Tophat 연산은 밝기 값이 크게 변화하는 영역을 강조합니다.
Tophat = 원본 - Opening
Blackhat (cv2.BLACKHAT)
Blackhat 연산은 어두운 부분을 강조합니다.
Blackhat = Closing - 원본
코드
저는 트랙바를 이용하여 커널 크기에 따른 차이를 만들어보았는데요.
다른 것도 비교해보시면 좋을 것 같습니다.
import os
import cv2
import numpy as np
path = os.path.join('img', 'img.jpg')
src = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
op_idx = {
'gradient': cv2.MORPH_GRADIENT,
'tophat': cv2.MORPH_TOPHAT,
'blackhat': cv2.MORPH_BLACKHAT,
}
def onChange(k, op_name):
if k == 0:
cv2.imshow(op_name, src)
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (k, k))
dst = cv2.morphologyEx(src, op_idx[op_name], kernel)
cv2.imshow(op_name, dst)
cv2.imshow('src', src)
cv2.imshow('gradient', src)
cv2.imshow('tophat', src)
cv2.imshow('blackhat', src)
cv2.createTrackbar('k', 'gradient', 0, 300, lambda x: onChange(k=x, op_name='gradient'))
cv2.createTrackbar('k', 'tophat', 0, 300, lambda x: onChange(k=x, op_name='tophat'))
cv2.createTrackbar('k', 'blackhat', 0, 300, lambda x: onChange(k=x, op_name='blackhat'))
cv2.waitKey()
cv2.destroyAllWindows()
'OpenCV' 카테고리의 다른 글
파이썬 OpenCV 외곽선 검출(Contours) (0) | 2020.07.26 |
---|---|
파이썬 OpenCV 이미지 이진화(Binarization) : threshold otsu adaptiveThreshold (0) | 2020.07.26 |
파이썬 OpenCV 모폴로지(Morphology) -1: 침식(erode) / 팽창(dilate) /Opening & Closing (0) | 2020.07.26 |
파이썬 OpenCV 미분 필터링 -3 : Canny (0) | 2020.07.26 |
파이썬 OpenCV 미분 필터링 -2 : Sobel / Scharr / Laplacian (0) | 2020.07.25 |