본문으로 바로가기

파이썬 OpenCV 미분 필터링 -3 : Canny

category OpenCV 2020. 7. 26. 00:20

Canny

  1. 가우시안(Gaussian) 필터를 이용하여 노이즈를 제거
  2. 소벨(Sobel) 필터를 이용하여 Gradient 방향
  3. 비최대치 억제로 Gradient 방향에서 최대치만 검출
  4. 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개를 이용해서 비교하기 쉽게 했습니다.