728x90
Canny
- 가우시안(Gaussian) 필터를 이용하여 노이즈를 제거
- 소벨(Sobel) 필터를 이용하여 Gradient 방향
- 비최대치 억제로 Gradient 방향에서 최대치만 검출
- Thresholding 으로 경계값(min, max)을 지정해서 경계 지정
cv2.Canny(src, threshold1, threshold2, edgets=None, apertureSize=None, L2gradient=None) -> edges
- src: 입력 이미지
- threshold1, threshold2: 하단, 상단 임계값
- edges: edge 이미지
- apertureSize: 소벨(Sobel) 필터
- L2gradient: True(L_2 norm), False(L_1 norm)
import cv2
import os
import numpy as np
path = os.path.join('img', 'img.jpg')
src = cv2.imread(path, cv2.IMREAD_GRAYSCALE)
dst = src.copy()
cv2.imshow('src', src)
cv2.imshow('Canny', dst)
th1, th2 = 0, 0
def onChange_th1(k):
global th1
if k > 0:
th1 = k
dst = cv2.Canny(src, th1, th2)
cv2.imshow('Canny', dst)
def onChange_th2(k):
global th2
if k > 0:
th2 = k
dst = cv2.Canny(src, th1, th2)
cv2.imshow('Canny', dst)
cv2.createTrackbar('th1', 'Canny', 0, 300, onChange_th1)
cv2.createTrackbar('th2', 'Canny', 0, 300, onChange_th2)
cv2.waitKey()
cv2.destroyAllWindows()

트랙바 2개를 이용해서 비교하기 쉽게 했습니다.
