How to Perform Distance Transformation on a Given Image in OpenCV Python?
OpenCV (Open Source Computer Vision Library) is a popular library used to process images and videos. One of the most useful features of OpenCV is distance transformation, which can be used to identify the distance of each pixel in an image from a particular object or edge.
In this article, we will discuss how to perform distance transformation on a given image in OpenCV using Python. We will start by understanding what distance transformation is and then move on to the code implementation.
What is Distance Transformation?
Distance transformation is a process that is used to find the distance of each pixel in an image from a particular object or edge. This can be useful in a wide variety of applications, including image segmentation, object recognition, and path planning.
OpenCV provides the distanceTransform()
function to perform distance transformation. This function takes an input image and calculates the distance of each pixel from the edge or object in the image.
Code Implementation
To begin with, we need to import the necessary libraries and read the input image. We can use the imread()
function of OpenCV to read in the image file:
import cv2
import numpy as np
# read the input image
image = cv2.imread('input_image.png', 0)
Note that the second argument of imread()
specifies the color format of the image. In this case, we are using grayscale images, and hence we have set it to 0
.
Next, we can use the distanceTransform()
function to perform distance transformation on the input image. This function takes four arguments:
- Input image: The grayscale input image on which distance transformation needs to be performed.
- Distance Type: The type of distance metric to use. We can choose from
DIST_L1
,DIST_L2
,DIST_C
, andDIST_LABEL_PIXEL
. - Mask size: The size of the mask used to calculate the distance. The value must be odd, and the recommended value is 3.
- Output data type: The data type of the output image. The recommended data type is
cv2.CV_32F
.
# perform distance transformation
dist_transform = cv2.distanceTransform(image, cv2.DIST_L2, 3)
Here, we have used the DIST_L2
distance metric. The maskSize
argument is set to 3, and the outputType
is set to cv2.CV_32F
.
Once we have performed the distance transformation, we can use the minMaxLoc()
method to find the minimum and maximum distances in the output image:
# find the minimum and maximum distances
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(dist_transform)
Next, we can normalize the output image to ensure that the distances are in the range of 0 to 255. We can use the normalize()
function of OpenCV to do this:
# normalize the output image
output_image = cv2.normalize(dist_transform, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)
In this example, we have used the NORM_MINMAX
normalization method, which scales the output image so that the minimum value is 0 and the maximum value is 255. We have also specified the dtype
argument as cv2.CV_8U
, which sets the output data type to 8-bit unsigned integer.
Finally, we can display the input and output images using the imshow()
function of OpenCV:
# display the input and output images
cv2.imshow('Input Image', image)
cv2.imshow('Output Image', output_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
The complete code implementation is shown below:
import cv2
import numpy as np
# read the input image
image = cv2.imread('input_image.png', 0)
# perform distance transformation
dist_transform = cv2.distanceTransform(image, cv2.DIST_L2, 3)
# find the minimum and maximum distances
min_val, max_val, min_loc, max_loc = cv2.minMaxLoc(dist_transform)
# normalize the output image
output_image = cv2.normalize(dist_transform, None, 0, 255, cv2.NORM_MINMAX, dtype=cv2.CV_8U)
# display the input and output images
cv2.imshow('Input Image', image)
cv2.imshow('Output Image', output_image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Conclusion
Distance transformation is an essential technique used in many computer vision applications. OpenCV provides a simple and efficient way to perform distance transformation on images using its distanceTransform()
function. We hope thatthis article has been helpful in understanding how to perform distance transformation on a given image in OpenCV using Python. Keep exploring OpenCV and its various features to enhance your computer vision skills.