[ Python OpenCV ] 파이썬 오픈씨브이 경계 라인 검출 캐니 - cv2.Canny

[ Python OpenCV ] 파이썬 오픈씨브이 경계 라인 검출 캐니 - cv2.Canny



1. 캐니 에지 4단계 구성 개념 및 이론

    - 노이즈 제거
    - 명암 찾기
    - 억제 시키기
    - 임계값 찾기


2. 1단계 가우시안 필터 이용

    - 5x5 가우시안 필터로 이미지 노이즈 제거

<필터 전>

<필터 후>


3. 2단계 명암 찾기

    - Sobel 커널로 필터 도함수 찾기


<소벨 사용>


4. 3단계 억제 하기

    - 그래디언트 크기와 방향을 얻은 후 가장자리 픽셀 제거


<그래디언트>


5. 4단계 임계값 연산

    - minVal과 maxVal이라는 두 개의 임계값 사이에 있는 항목은 연결성을 기반으로 분류



6. 그래디언트 소스 코드

import cv2 as cv
import numpy as np

# 이미지 가져오기
matImage = cv.imread('D:\VSCode\cat.jpeg')

# 이미지 보기
cv.imshow('image', matImage)
# 이미지 그레이 변환
matGray = cv.cvtColor(matImage, cv.IMREAD_GRAYSCALE)

# x방향으로 소벨필터 적용
dx = cv.Sobel(matGray, cv.CV_32F, 1, 0)
# y방향으로 소벨필터 적용
dy = cv.Sobel(matGray, cv.CV_32F, 0, 1)

# 그래디언트 구하기
Magnitude = cv.magnitude(dx, dy)
Magnitude = np.clip(Magnitude, 0, 255).astype(np.uint8)

# 이미지 보기
cv.imshow('Magnitude', Magnitude)


7. 캐니 소스 코드

import cv2 as cv
import numpy as np

# 이미지 가져오기
matImage = cv.imread('D:\VSCode\cat.jpeg')

# 이미지 보기
cv.imshow('image', matImage)

# 캐니
canny100 = cv.Canny(matImage, 0, 100)
canny200 = cv.Canny(matImage, 100, 200)
canny250 = cv.Canny(matImage, 200, 255)

# 캐니 출력
cv.imshow('matImage', matImage)
cv.imshow('canny100', canny100)
cv.imshow('canny200', canny200)
cv.imshow('canny250', canny250)

# 입력 대기
cv.waitKey(0)


==========


댓글