Обнаружение краев Canny — популярный метод обнаружения краев на изображениях. OpenCV предоставляет встроенную функцию cv2.Canny()
, которую можно использовать для обнаружения границ Canny.
Вот образец этого :::::::
import cv2 import numpy as np # Read the input image image = cv2.imread('input_image.jpg', cv2.IMREAD_GRAYSCALE) # Apply Gaussian blur to reduce noise (optional but recommended) blurred = cv2.GaussianBlur(image, (5, 5), 0) # Perform Canny edge detection edges = cv2.Canny(blurred, threshold1=50, threshold2=150) # Display the original image and the detected edges cv2.imshow('Original Image', image) cv2.imshow('Canny Edges', edges) cv2.waitKey(0) cv2.destroyAllWindows()
Замените 'input_image.jpg'
на путь к входному изображению. Алгоритм обнаружения границ Канни включает в себя несколько шагов:
- Размытие по Гауссу: применение размытия по Гауссу помогает уменьшить шум на изображении, что может привести к улучшению результатов обнаружения краев.
(5, 5)
указывает размер ядра Гаусса, а0
указывает стандартное отклонение в направлениях X и Y. - Обнаружение Canny Edge: функция
cv2.Canny()
принимает два пороговых значения:threshold1
иthreshold2
. Эти пороговые значения управляют уровнями градиента интенсивности, которые определяют, классифицируется ли пиксель как край или нет. Пиксели со значениями градиента вышеthreshold2
определенно являются краями, а пиксели со значениями градиента нижеthreshold1
определенно не являются краями. Пиксели со значениями градиента между двумя пороговыми значениями классифицируются как края, только если они соединены с пикселями вышеthreshold2
. Отрегулируйте эти пороговые значения в зависимости от характеристик вашего изображения. - После применения обнаружения краев Канни вы можете использовать функцию
cv2.imshow()
для отображения как исходного изображения, так и обнаруженных краев.
Еще один фрагмент кода для обнаружения Canny Edge:…
# Program - 1 # Canny Edge Detection (edge detection approach) # it combines 5 steps 1- Noise Reduction(gaussian), 2- Gradient Calculation, 3- Non-maximum suppresson, 4- Double Threshold, 5- Edge Tracking by hysteresis """ import cv2 import numpy as np img = cv2.imread("C:\\Users\\RANGER\\Desktop\\usgs-W.jpg",0) img = cv2.resize(img,(500,500)) # canny(img,thresh1,thresh2 at different lvl. canny = cv2.Canny(img,10,200) cv2.imshow("Original Gray",img) cv2.imshow("Canny",canny) cv2.waitKey(0) cv2.destroyAllWindows() """ ################################################ # Program - 2 # using Trackbar perform canny edge detection. import cv2 import numpy as np img = cv2.imread("C:\\Users\\RANGER\\Desktop\\Koenigsegg_agera.jpg",0) img = cv2.resize(img,(600,600)) def nothing(x): pass cv2.namedWindow("Canny") cv2.createTrackbar("Threshold","Canny",0,255,nothing) while True: a = cv2.getTrackbarPos("Threshold","Canny") print(a) res = cv2.Canny(img,a,255) cv2.imshow("Canny",res) k = cv2.waitKey(1) & 0xFF if k == 27: break cv2.waitKey(0) cv2.destroyAllWindows()
Вы можете использовать оба варианта с Trackbar или без Trackbar.
Помните, что обнаружение краев Canny — это лишь один из многих методов обнаружения краев, доступных в OpenCV. В зависимости от вашего конкретного применения вам может потребоваться поэкспериментировать с различными параметрами или даже объединить несколько методов для достижения наилучших результатов.
Пирамида изображений
Пирамида изображений — это многомасштабное представление изображения, в котором исходное изображение постепенно понижается для создания серии изображений с разным разрешением. Пирамиды изображений часто используются в задачах компьютерного зрения, таких как обнаружение объектов, смешивание изображений и сопоставление функций. OpenCV предоставляет функции для построения пирамид изображений и управления ими.
Простой код поможет вам легко понять:…..
import cv2 # Read the input image image = cv2.imread('input_image.jpg') # Build a Gaussian image pyramid pyramid = [image] for i in range(3): # You can adjust the number of pyramid levels image = cv2.pyrDown(image) # Downsample the image pyramid.append(image) # Display the pyramid levels for i, level in enumerate(pyramid): cv2.imshow(f'Level {i}', level) cv2.waitKey(0) cv2.destroyAllWindows()
В этом примере функция cv2.pyrDown()
используется для понижения разрешения изображения в 2 раза как в направлениях X, так и в направлениях Y. Вы можете регулировать количество уровней пирамиды, изменяя диапазон в цикле. Более высокие уровни пирамиды представляют изображения с более низким разрешением.
Обратите внимание, что существует также функция cv2.pyrUp()
, которую можно использовать для повышения разрешения изображения, но она обычно используется в сочетании с другими методами, такими как смешивание изображений, которые мы использовали перед упражнением.
Еще один фрагмент кода для того же самого:……
# image pyramid. image pyramid is basically single bt many image with different resolution. # why we need this.. at the time of object deection or image blending you might need to focus on some spit hole which mey be not observable from given resultion image. # so we create many image of same image with different resolution to detect things or objects. # two types of it.. # Gaussian Pyramid # Laplacian Pyramid. import cv2 import numpy as np img = cv2.imread("C:\\Users\\RANGER\\Desktop\\cdc.jpg",0) img = cv2.resize(img,(500,500)) #in Gaussian we have 2 function cv2.pyrUp(), cv2.pyrDown() pd1 = cv2.pyrDown(img) pd2 = cv2.pyrDown(pd1) pd3 = cv2.pyrUp(pd2) cv2.imshow("Original ",img) cv2.imshow("pddown1 ",pd1) cv2.imshow("pddown2",pd2) cv2.imshow("pdup",pd3) cv2.waitKey(0) cv2.destroyAllWindows()
Имейте в виду, что пирамиды изображений полезны для различных задач, таких как извлечение признаков и обнаружение масштабно-инвариантных объектов, когда вам необходимо обработать изображение в нескольких масштабах. Конкретный вариант использования будет определять количество уровней пирамиды и операций, которые вы выполняете на каждом уровне.