Python의 OpenCV 캐니

Manav Narula 2023년6월21일
  1. Python에서 cv2.canny() 함수 사용
  2. 결론
Python의 OpenCV 캐니

opencv 라이브러리를 사용하여 인공 지능, 기계 학습 및 기타 기술에서 컴퓨터 비전용 이미지 및 그래픽 작업을 수행합니다. 이 라이브러리의 기능을 사용하여 이미지를 효율적으로 읽고 처리할 수 있습니다.

이 튜토리얼은 Python에서 cv2.canny() 함수를 시연합니다.

Python에서 cv2.canny() 함수 사용

cv2.canny() 함수는 John F. Canny가 개발한 Canny Edge Detection 알고리즘을 구현합니다. 이 기능을 사용하여 주어진 이미지에서 가장자리를 감지할 수 있습니다.

알고리즘 자체에는 여러 단계가 있습니다.

  1. 첫 번째 단계는 노이즈 감소를 포함하며 이를 위해 알고리즘은 5x5 가우시안 필터를 사용합니다.

  2. 다음 단계는 주어진 이미지에 대한 강도 구배를 찾는 것입니다. 이 단계에서 이미지를 부드럽게 한 다음 Sobel 커널로 전달하여 x축과 y축을 따라 필터링하고 각 축에 대한 그래디언트를 찾습니다.

  3. 세 번째 단계에서는 경계를 형성하지 않는 바람직하지 않은 픽셀을 제거하기 위해 기울기 방향의 로컬 최대값으로 모든 픽셀을 검사합니다.

  4. 마지막 단계는 Edge를 분류하는 단계입니다. 두 개의 임계값 minValmaxVal이 사용됩니다.

    maxVal보다 큰 그래디언트 값을 가진 에지는 에지이며 minVal 미만의 에지는 그렇지 않습니다. 나머지 임계값은 연결성을 기준으로 분류됩니다.

위의 모든 단계는 cv2.canny() 함수에 의해 구현됩니다. 이 기능에 대한 매개변수를 결정하는 동안 이러한 단계에 대해 알아야 합니다.

다음 예에서는 이미지에서 가장자리를 감지합니다.

import cv2

img = cv2.imread("deftstack.png")
e = cv2.Canny(img, threshold1=50, threshold2=100)

cv2.imshow("Edges Detected", e)
cv2.waitKey(0)
cv2.destroyAllWindows()

opencv의 canny 함수를 사용하여 가장자리 감지

위의 예에서는 cv2.imread() 함수를 사용하여 이미지를 읽습니다. cv2.canny() 함수를 사용하여 이 이미지의 가장자리를 감지합니다.

함수 threshold1threshold2의 두 매개변수에 주목하십시오. 이 두 매개변수는 앞에서 설명한 minValmaxVal 임계값 주파수의 값입니다.

이 두 값을 반드시 제공해야 합니다.

주어진 이미지의 가장자리를 분류한 후 cv2.imshow() 함수를 사용하여 새 창에 표시합니다. 예제에서 cv2.waitkey(0) 함수는 인터프리터가 생성된 창을 자동으로 닫고 사용자가 키를 누르기를 기다리는 것을 방지하는 데 사용됩니다.

cv2.destroyAllWindows() 함수는 모든 창을 닫습니다.

cv2.canny() 함수는 apertureSizeL2gradient라는 두 개의 추가 옵션 매개변수도 허용합니다. apertureSize 매개변수는 Sobel 커널의 조리개 크기를 지정합니다.

기본적으로 해당 값은 3이며 3에서 5 사이의 홀수 값을 사용할 수 있습니다. 이미지에서 더 많은 특징을 얻기 위해 apertureSize를 증가시킬 수 있습니다.

L2gradientTrue 또는 False 값을 사용하며 기본값은 False입니다.

L2gradient 매개변수를 True로 지정하면 새로운 L2Gradient 알고리즘이 기울기 값을 계산하는 데 사용됩니다. 그렇지 않으면 전통적인 방정식이 사용됩니다. 새로운 알고리즘은 좀 더 정확한 경향이 있습니다.

결론

이 튜토리얼에서 cv2.canny() 함수를 사용하는 방법에 대해 논의했습니다. 우리는 Canny Edge 탐지 알고리즘과 이 함수가 내부적으로 이를 구현하는 방법에 대해 논의했습니다.

기능은 예제와 함께 시연되었습니다. 또한 이 함수의 매개변수에 대해서도 논의했습니다.

일부는 필수인 threshold1threshold2인 반면, 나머지는 선택 사항인 apertureSizeL2gradient입니다.

작가: Manav Narula
Manav Narula avatar Manav Narula avatar

Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.

LinkedIn

관련 문장 - Python OpenCV