Python의 OpenCV 캐니
opencv
라이브러리를 사용하여 인공 지능, 기계 학습 및 기타 기술에서 컴퓨터 비전용 이미지 및 그래픽 작업을 수행합니다. 이 라이브러리의 기능을 사용하여 이미지를 효율적으로 읽고 처리할 수 있습니다.
이 튜토리얼은 Python에서 cv2.canny()
함수를 시연합니다.
Python에서 cv2.canny()
함수 사용
cv2.canny()
함수는 John F. Canny가 개발한 Canny Edge Detection 알고리즘을 구현합니다. 이 기능을 사용하여 주어진 이미지에서 가장자리를 감지할 수 있습니다.
알고리즘 자체에는 여러 단계가 있습니다.
-
첫 번째 단계는 노이즈 감소를 포함하며 이를 위해 알고리즘은 5x5 가우시안 필터를 사용합니다.
-
다음 단계는 주어진 이미지에 대한 강도 구배를 찾는 것입니다. 이 단계에서 이미지를 부드럽게 한 다음 Sobel 커널로 전달하여 x축과 y축을 따라 필터링하고 각 축에 대한 그래디언트를 찾습니다.
-
세 번째 단계에서는 경계를 형성하지 않는 바람직하지 않은 픽셀을 제거하기 위해 기울기 방향의 로컬 최대값으로 모든 픽셀을 검사합니다.
-
마지막 단계는 Edge를 분류하는 단계입니다. 두 개의 임계값
minVal
및maxVal
이 사용됩니다.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()
위의 예에서는 cv2.imread()
함수를 사용하여 이미지를 읽습니다. cv2.canny()
함수를 사용하여 이 이미지의 가장자리를 감지합니다.
함수 threshold1
및 threshold2
의 두 매개변수에 주목하십시오. 이 두 매개변수는 앞에서 설명한 minVal
및 maxVal
임계값 주파수의 값입니다.
이 두 값을 반드시 제공해야 합니다.
주어진 이미지의 가장자리를 분류한 후 cv2.imshow()
함수를 사용하여 새 창에 표시합니다. 예제에서 cv2.waitkey(0)
함수는 인터프리터가 생성된 창을 자동으로 닫고 사용자가 키를 누르기를 기다리는 것을 방지하는 데 사용됩니다.
cv2.destroyAllWindows()
함수는 모든 창을 닫습니다.
cv2.canny()
함수는 apertureSize
및 L2gradient
라는 두 개의 추가 옵션 매개변수도 허용합니다. apertureSize
매개변수는 Sobel 커널의 조리개 크기를 지정합니다.
기본적으로 해당 값은 3이며 3에서 5 사이의 홀수 값을 사용할 수 있습니다. 이미지에서 더 많은 특징을 얻기 위해 apertureSize
를 증가시킬 수 있습니다.
L2gradient
는 True
또는 False
값을 사용하며 기본값은 False
입니다.
L2gradient
매개변수를 True
로 지정하면 새로운 L2Gradient
알고리즘이 기울기 값을 계산하는 데 사용됩니다. 그렇지 않으면 전통적인 방정식이 사용됩니다. 새로운 알고리즘은 좀 더 정확한 경향이 있습니다.
결론
이 튜토리얼에서 cv2.canny()
함수를 사용하는 방법에 대해 논의했습니다. 우리는 Canny Edge 탐지 알고리즘과 이 함수가 내부적으로 이를 구현하는 방법에 대해 논의했습니다.
기능은 예제와 함께 시연되었습니다. 또한 이 함수의 매개변수에 대해서도 논의했습니다.
일부는 필수인 threshold1
및 threshold2
인 반면, 나머지는 선택 사항인 apertureSize
및 L2gradient
입니다.
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