How to Compute the Area and Perimeter of an Image Contour using OpenCV Python?
OpenCV (Open Source Computer Vision) is a powerful library that is used in various image and video processing tasks. One of the essential operations in image processing is object detection, where we detect the edges of the objects in an image. In this tutorial, we will learn how to compute the area and perimeter of an image contour using OpenCV Python.
What is a Contour?
In image processing, a contour is a line that surrounds an object’s boundary. In other words, it is a set of points that represents the edge of the object. The contour can be represented by a set of (x, y) coordinates, which can be used to compute the object’s area and perimeter.
Prerequisites
Before we proceed with the tutorial, we need to install OpenCV Python and its dependencies. You can install it using pip:
pip install opencv-python
Getting Started
First, we will import the necessary libraries.
import cv2
import numpy as np
Next, we will load an image and convert it to a grayscale image.
# Load an image
image = cv2.imread('image.jpg')
# Convert it to grayscale
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
Now, we will apply the thresholding technique to the image to convert it into a binary image. Thresholding is a technique that converts a grayscale image into a binary image, where all pixels with values above a certain threshold value are set to white, and all pixels with values below that threshold value are set to black.
# Apply thresholding
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
After applying thresholding, we can find the contours in the image using the cv2.findContours()
function.
# Find contours
contours, _ = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
The cv2.findContours()
function returns a list of contours and a hierarchy. We are not interested in the hierarchy in this tutorial, so we will ignore it.
Computing Area and Perimeter
We can compute the area and perimeter of each contour using the cv2.contourArea()
and cv2.arcLength()
functions, respectively.
for contour in contours:
# Compute area
area = cv2.contourArea(contour)
print("Area:", area)
# Compute perimeter
perimeter = cv2.arcLength(contour, True)
print("Perimeter:", perimeter)
We can also draw the contours on the image using the cv2.drawContours()
function.
# Draw contours
cv2.drawContours(image, contours, -1, (0, 255, 0), 2)
# Show the image
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Complete Code
Here is the complete code that computes the area and perimeter of an image contour using OpenCV Python.
import cv2
import numpy as np
# Load an image
image = cv2.imread('image.jpg')
# Convert it to grayscale
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# Apply thresholding
_, thresh = cv2.threshold(gray, 127, 255, cv2.THRESH_BINARY)
# Find contours
contours, _ = cv2.findContours(thresh, cv2.RETR_LIST, cv2.CHAIN_APPROX_SIMPLE)
for contour in contours:
# Compute area
area = cv2.contourArea(contour)
print("Area:", area)
# Compute perimeter
perimeter = cv2.arcLength(contour, True)
print("Perimeter:", perimeter)
# Draw contours
cv2.drawContours(image, contour, -1, (0, 255, 0), 2)
# Show the image
cv2.imshow('Contours', image)
cv2.waitKey(0)
cv2.destroyAllWindows()
Conclusion
In this tutorial, we have learned how to compute the area and perimeter of an image contour using OpenCV Python. We have also learned how to use the cv2.findContours()
, cv2.contourArea()
, and cv2.arcLength()
functions to perform these computations. This technique is useful in various image processing and computer vision tasks, such as object detection, tracking, and recognition.