Open In App

Python OpenCV – Canny() Function

Improve
Improve
Like Article
Like
Save
Share
Report

In this article, we will see the Canny Edge filter in OpenCV. Canny() Function in OpenCV is used to detect the edges in an image.

Syntax: cv2.Canny(image, T_lower, T_upper, aperture_size, L2Gradient)

Where: 

  • Image: Input image to which Canny filter will be applied
  • T_lower: Lower threshold value in Hysteresis Thresholding
  • T_upper: Upper threshold value in Hysteresis Thresholding
  • aperture_size: Aperture size of the Sobel filter.
  • L2Gradient: Boolean parameter used for more precision in calculating Edge Gradient.

Canny Edge detection is an Algorithm consisting of 4 major steps:

  • Reduce Noise using Gaussian Smoothing.
  • Compute image gradient using Sobel filter.
  • Apply Non-Max Suppression or NMS to just jeep the local maxima
  • Finally, apply Hysteresis thresholding which that 2 threshold values T_upper and T_lower which is used in the Canny() function.

Input Image:

Basic example of Canny() function

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()


Output:

Canny() function with Aperture_size

This is an optional parameter that is used to specify the order of the Sobel filter used to calculate the gradient in the Canny algorithm. The default value is 3 and its value should be odd between 3 and 7. You can increase the Aperture size when you want to detect more detailed features.

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()


Output: 

Canny() function with L2Gradient

It’s a boolean parameter that specifies if you want to calculate the usual gradient equation or the L2Gradient algorithm. Again, it’s an optional parameter. L2gradient is nothing my sqrt(gradient_x_square + gradient_y_square) whereas L1gradient is just 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()


 Output: 

Canny() function with both Aperture size and L2gradient

Here we will use both attributes within the function.

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()


Output: 



Last Updated : 03 Jan, 2023
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads