cv2.Canny() — це функція, яка використовується для виявлення країв у зображенні за допомогою алгоритму Кенні (Canny Edge Detection). Алгоритм Кенні є одним з найпопулярніших методів виявлення країв у комп'ютерному зорі. Він здатний знаходити границі об'єктів у зображенні, що допомагає в багатьох задачах обробки зображень, таких як сегментація, виявлення об'єктів та інші.
python
Копіювати код
edges = cv2.Canny(image, threshold1, threshold2[, apertureSize[, L2gradient]])
image: Вхідне зображення, яке має бути у градаціях сірого (одноканальне зображення). Якщо ви подаєте кольорове зображення, його потрібно спочатку конвертувати в градації сірого за допомогою cv2.cvtColor().
threshold1: Перший поріг для застосування гістерезису (hysteresis). Він визначає нижню границю інтенсивності, при якій піксель буде розглядатися як край.
threshold2: Другий поріг для застосування гістерезису. Він визначає верхню границю інтенсивності. Пікселі з інтенсивністю між threshold1 і threshold2 розглядаються як краї, якщо вони з'єднані з пікселем, що перевищує threshold2.
apertureSize (необов'язковий): Розмір ядра (kernel) для оператора Собеля, який використовується під час обчислення градієнтів зображення. Це непарне число, зазвичай 3, 5 або 7. Значення за замовчуванням — 3.
L2gradient (необов'язковий): Якщо True, використовується більш точний метод для обчислення величини градієнта за формулою sqrt((dI/dx)^2 + (dI/dy)^2); якщо False, використовується наближена формула |dI/dx| + |dI/dy|. Значення за замовчуванням — False.
python
Копіювати код
import cv2
import numpy as np
# Завантаження зображення
image = cv2.imread('path/to/image.jpg', 0) # 0 означає завантаження зображення у градаціях сірого
# Застосування оператора Кенні для виявлення країв
edges = cv2.Canny(image, 100, 200)
# Відображення результату
cv2.imshow('Canny Edges', edges)
cv2.waitKey(0)
cv2.destroyAllWindows()
Алгоритм Кенні складається з кількох етапів:
Згладжування зображення: Для зменшення шуму використовується гауссове згладжування (Gaussian Blur).
Обчислення градієнтів: Використовується оператор Собеля для обчислення градієнтів зображення в напрямках x і y, що дозволяє визначити напрямок краю.
Придушення немаксимальних значень: Кожна точка, яка не є локальним максимумом у напрямку градієнта, придушується, щоб залишити тільки сильні краї.
Гістерезис: Відфільтровуються слабкі краї на основі порогових значень (threshold1 і threshold2). Краї, що перевищують верхній поріг (threshold2), завжди розглядаються як крайові точки, а ті, що знаходяться між порогами, залишаються лише, якщо вони пов'язані з сильними краями.
Метод cv2.Canny() широко використовується в задачах комп'ютерного зору та обробки зображень для виявлення контурів об'єктів, сегментації зображень та інших задач, де необхідно виділити чіткі краї об'єктів на зображенні.
4o