在本文中,我們將看到 OpenCV 中的 Canny Edge 過濾器。 OpenCV 中的 Canny() 函數用於檢測圖像中的邊。
用法:cv2.Canny(image, T_lower, T_upper, aperture_size, L2Gradient)
Where:
- 圖像:將應用 Canny 過濾器的輸入圖像
- T_lower:Hysteresis Thresholding 中的下閾值
- T_upper:Hysteresis Thresholding中的上閾值
- aperture_size:Sobel 濾波器的孔徑大小。
- L2Gradient:布爾參數,用於更精確地計算邊梯度。
Canny 邊檢測是一個由 4 個主要步驟組成的算法:
- 使用高斯平滑減少噪聲。
- 使用 Sobel 濾波器計算圖像梯度。
- 應用非最大值抑製或 NMS 來僅吉普車局部最大值
- 最後,應用在 Canny() 函數中使用的 2 個閾值 T_upper 和 T_lower 的滯後閾值。
輸入圖像:
的基本示例Canny() 函數
Python3
import cv2
img = cv2.imread("test.jpeg") # Read image
# Setting parameter values
t_lower = 50 # Lower Threshold
t_upper = 150 # Upper threshold
# Applying the Canny Edge filter
edge = cv2.Canny(img, t_lower, t_upper)
cv2.imshow('original', img)
cv2.imshow('edge', edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出:
Canny() 函數與 Aperture_size
這是一個可選參數,用於指定用於計算 Canny 算法中的梯度的 Sobel 濾波器的階數。默認值為 3,其值應為 3 到 7 之間的奇數。當您想要檢測更詳細的特征時,可以增加 Aperture 大小。
Python3
import cv2
img = cv2.imread("test.jpeg") # Read image
# Setting All parameters
t_lower = 100 # Lower Threshold
t_upper = 200 # Upper threshold
aperture_size = 5 # Aperture size
# Applying the Canny Edge filter
# with Custom Aperture Size
edge = cv2.Canny(img, t_lower, t_upper,
apertureSize=aperture_size)
cv2.imshow('original', img)
cv2.imshow('edge', edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出:
Canny() 函數使用 L2Gradient
這是一個布爾參數,指定您是要計算通常的梯度方程還是 L2Gradient 算法。同樣,它是一個可選參數。 L2gradient 不是我的 sqrt(gradient_x_square + gradient_y_square),而 L1gradient 隻是 abs(gradient_x) + abs(gradient_y)。
Python3
import cv2
img = cv2.imread("test.jpeg") # Read image
t_lower = 100 # Lower Threshold
t_upper = 200 # Upper threshold
aperture_size = 5 # Aperture size
L2Gradient = True # Boolean
# Applying the Canny Edge filter with L2Gradient = True
edge = cv2.Canny(img, t_lower, t_upper, L2gradient = L2Gradient )
cv2.imshow('original', img)
cv2.imshow('edge', edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出:
Canny() 函數具有孔徑大小和 L2gradient
在這裏,我們將在函數中使用這兩個屬性。
Python3
import cv2
img = cv2.imread("test.jpeg") # Read image
# Defining all the parameters
t_lower = 100 # Lower Threshold
t_upper = 200 # Upper threshold
aperture_size = 5 # Aperture size
L2Gradient = True # Boolean
# Applying the Canny Edge filter
# with Aperture Size and L2Gradient
edge = cv2.Canny(img, t_lower, t_upper,
apertureSize = aperture_size,
L2gradient = L2Gradient )
cv2.imshow('original', img)
cv2.imshow('edge', edge)
cv2.waitKey(0)
cv2.destroyAllWindows()
輸出:
相關用法
- Python Wand canny()用法及代碼示例
- Python OpenCV setWindowTitle()用法及代碼示例
- Python OpenCV resizeWindow()用法及代碼示例
- Python OpenCV waitKey()用法及代碼示例
- Python OpenCV waitKeyEx()用法及代碼示例
- Python OpenCV getRotationMatrix2D()用法及代碼示例
- Python OpenCV destroyAllWindows()用法及代碼示例
- Python OpenCV namedWindow()用法及代碼示例
- Python OpenCV selectroi()用法及代碼示例
- Python OpenCV imdecode()用法及代碼示例
- Python OpenCV getTrackbarPos()用法及代碼示例
- Python OpenCV Filter2D()用法及代碼示例
- Python OpenCV setTrackbarPos()用法及代碼示例
- Python OpenCV getgaussiankernel()用法及代碼示例
- Python OpenCV haveImageReader()用法及代碼示例
注:本文由純淨天空篩選整理自ayushmankumar7大神的英文原創作品 Python OpenCV – Canny() Function。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。