Существуют различные краевые детекторы, которые вы можете использовать: Канни, Собел, Лапласиан, Шарр, Превитт, Робертс .Вы можете сделать это с помощью OpenCV :
import cv2
import numpy as np
img = cv2.imread('your_image.jpg', 0)
# Canny
edges_canny = cv2.Canny(img, 100, 100)
# Sobel
sobel_x = cv2.Sobel(img, cv2.CV_64F, 1, 0, ksize=5)
sobel_y = cv2.Sobel(img, cv2.CV_64F, 0, 1, ksize=5)
edges_sobel = np.hypot(sobel_x, sobel_y)
edges_sobel *= 255.0 / np.max(edges_sobel)
# Laplacian
edges_laplacian = cv2.Laplacian(img, cv2.CV_64F)
# Scharr
schar_x = cv2.Scharr(img, cv2.CV_64F, 1, 0)
schar_y = cv2.Scharr(img, cv2.CV_64F, 0, 1)
edges_scharr = np.hypot(schar_x, schar_y)
edges_scharr *= 255.0 / np.max(edges_scharr)
или scikit-image :
import cv2
from skimage import feature, filters
img = cv2.imread('your_image.jpg', 0)
edges_canny = feature.canny(img) # Canny
edges_sobel = filters.sobel(img) # Sobel
edges_laplace = filters.laplace(img) # Laplacian
edges_scharr = filters.scharr(img) # Scharr
edges_prewitt = filters.prewitt(img) # Prewitt
edges_roberts = filters.roberts(img) # Roberts
Детектор Canny Edge , вероятно, является наиболее часто используемым и наиболее эффективным методом, но также и наиболее сложным.Для получения более подробной информации о том, чем отличаются упомянутые методы, проверьте это сообщение в блоге .