Чтобы автоматически выбрать максимальное и минимальное значения для cv2.Canny()
, вы можете использовать функцию auto_canny()
, созданную Адрианом Роузброком в своем блоге Нулевой параметр, автоматическое обнаружение Canny edge с помощью Python и OpenCV . Идея состоит в том, чтобы вычислить медиану интенсивности пикселей в изображении, а затем принять это медианное значение для определения порогов lower
и upper
. Для более подробного объяснения загляните в его блог. Вот функция
def auto_canny(image, sigma=0.33):
# Compute the median of the single channel pixel intensities
v = np.median(image)
# Apply automatic Canny edge detection using the computed median
lower = int(max(0, (1.0 - sigma) * v))
upper = int(min(255, (1.0 + sigma) * v))
return cv2.Canny(image, lower, upper)
Чтобы выполнить обнаружение края на нескольких изображениях, вы можете использовать библиотеку glob
, чтобы перебирать каждое изображение, применять обнаружение четкого края, а затем сохранять изображение. Вот результаты
import cv2
import numpy as np
import glob
def auto_canny(image, sigma=0.33):
# Compute the median of the single channel pixel intensities
v = np.median(image)
# Apply automatic Canny edge detection using the computed median
lower = int(max(0, (1.0 - sigma) * v))
upper = int(min(255, (1.0 + sigma) * v))
return cv2.Canny(image, lower, upper)
# Read in each image and convert to grayscale
images = [cv2.imread(file,0) for file in glob.glob("images/*.jpg")]
# Iterate through each image, perform edge detection, and save image
number = 0
for image in images:
canny = auto_canny(image)
cv2.imwrite('canny_{}.png'.format(number), canny)
number += 1