이번 글에서는 파이썬 cv2 모듈을 활용하여 이미지 가장자리를 검출하는 방법에 대해 알아보겠습니다.
Canny Edge Detection
Canny Edge Detection은 이미지에서 가장자리를 검출하는 알고리즘 중 가장 성능이 우수한 알고리즘 중 하나입니다. 이 알고리즘은 다음과 같은 과정으로 가장자리를 검출합니다.
- 이미지를 grayscale로 변환합니다.
- Gaussian blur를 적용하여 이미지의 noise를 제거합니다.
- Sobel filter를 사용하여 이미지의 gradient를 계산합니다.
- Non-maximum suppression을 사용하여 이미지의 가장자리를 추출합니다.
- Double threshold를 사용하여 추출한 가장자리 중 유효한 가장자리를 선택합니다.
- Hysteresis threshold를 사용하여 가장자리를 연결합니다.
아래 코드는 Canny Edge Detection을 사용하여 이미지의 가장자리를 검출하는 예제입니다.
import cv2
import numpy as np
# 이미지 읽어오기
img = cv2.imread('image.jpg')
# 이미지를 grayscale로 변환
gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
# Gaussian blur 적용
gray_blurred = cv2.GaussianBlur(gray, (3, 3), 0)
# Canny Edge Detection 적용
edges = cv2.Canny(gray_blurred, 50, 150)
# 이미지 출력
cv2.imshow('image', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
위 코드에서 cv2.Canny() 함수는 Canny Edge Detection을 적용하여 이미지의 가장자리를 검출합니다. 이 함수는 low threshold와 high threshold를 인자로 받습니다. high threshold는 추출한 가장자리 중 실제 가장자리인 것으로 판단하는 threshold이며, low threshold는 high threshold보다 작은 값의 가장자리를 제거하기 위한 값입니다.
추가 정보
Canny Edge Detection 외에도 이미지 가장자리 검출을 위한 다양한 알고리즘이 존재합니다. 예를 들어, cv2.Sobel() 함수를 사용하여 이미지의 gradient를 계산하고 cv2.threshold() 함수를 사용하여 thresholding 처리를 할 수 있습니다. 이 외에도 cv2.Laplacian() 함수를 사용하여 Laplacian filter를 적용하여 이미지의 가장자리를 검출할 수 있습니다. 하지만 이러한 방법들은 Canny Edge Detection보다 정확도가 떨어지거나 다른 문제점이 있을 수 있습니다.
결론
이상으로 파이썬 cv2 모듈을 활용하여 이미지 가장자리 검출하는 방법에 대해 알아보았습니다. Canny Edge Detection은 이미지에서 가장자리를 검출하는 뛰어난 알고리즘 중 하나입니다. 이 알고리즘을 사용하여 이미지 분석 및 처리에 활용할 수 있습니다.
'파이썬 > OpenCV' 카테고리의 다른 글
파이썬 모듈 : OpenCV 동영상 캡쳐&녹화 (0) | 2023.03.28 |
---|---|
파이썬 모듈 : OpenCV 윤곽선 검출 (0) | 2023.03.27 |
파이썬 모듈 : OpenCV 이미지 확대, 회전, 자르기 (0) | 2023.03.25 |
파이썬 모듈 : OpenCV 읽기, 쓰기, 필터링 (0) | 2023.03.24 |
이미지의 크기 변환 cv2.resize() (0) | 2022.11.17 |