Обнаружение краев 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' на путь к входному изображению. Алгоритм обнаружения границ Канни включает в себя несколько шагов:

  1. Размытие по Гауссу: применение размытия по Гауссу помогает уменьшить шум на изображении, что может привести к улучшению результатов обнаружения краев. (5, 5) указывает размер ядра Гаусса, а 0 указывает стандартное отклонение в направлениях X и Y.
  2. Обнаружение Canny Edge: функция cv2.Canny() принимает два пороговых значения: threshold1 и threshold2. Эти пороговые значения управляют уровнями градиента интенсивности, которые определяют, классифицируется ли пиксель как край или нет. Пиксели со значениями градиента выше threshold2 определенно являются краями, а пиксели со значениями градиента ниже threshold1 определенно не являются краями. Пиксели со значениями градиента между двумя пороговыми значениями классифицируются как края, только если они соединены с пикселями выше threshold2. Отрегулируйте эти пороговые значения в зависимости от характеристик вашего изображения.
  3. После применения обнаружения краев Канни вы можете использовать функцию 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()

Имейте в виду, что пирамиды изображений полезны для различных задач, таких как извлечение признаков и обнаружение масштабно-инвариантных объектов, когда вам необходимо обработать изображение в нескольких масштабах. Конкретный вариант использования будет определять количество уровней пирамиды и операций, которые вы выполняете на каждом уровне.