Open In App

Count number of Object using Python-OpenCV

Last Updated : 03 Apr, 2025
Summarize
Comments
Improve
Suggest changes
Share
Like Article
Like
Report

In this article, we will use image processing to count the number of Objects using OpenCV in Python.

Google Colab link: https://colab.research.google.com/drive/10lVjcFhdy5LVJxtSoz18WywM92FQAOSV?usp=sharing

Module needed

  • OpenCv: OpenCv is an open-source library that is useful for computer vision applications such as image processing, video processing, facial recognition, and detection, etc.
  • Numpy: Numpy is a python package for scientific computing. It is a popular math library for Machine Learning. The main Object of Numpy is a multidimensional array.
  • Matplotlib: Matplotlib is a Python library used for data visualization and graphical plotting of the data.

Image Used:.

Stepwise implementation

Step 1: Import required libraries. 

Python
# Import libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt

Step 2: We will read the image by using "cv2.imread(image-name)" command & then convert this image into grayscale image using "cv2.cvtColor(image-name, cv2.COLOR_BGR2GRAY)" command.

Python
image = cv2.imread('coins.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
plt.imshow(gray, cmap='gray')

Output:

Step 3: For counting, we have to detect the edges but before detecting the edges we have to make the image blur to avoid the noises. Use "cv2.GaussianBlur(image-name, Kernal size, std. deviation)"

Python
blur = cv2.GaussianBlur(gray, (11, 11), 0)
plt.imshow(blur, cmap='gray')

Output:

    

Step 4:  Now we will detect edges using a canny algorithm, 2nd & 3rd parameters in cv2.canny() function are threshold values. a value between 30 & 150 are consider as an edge for this image.

Python
canny = cv2.Canny(blur, 30, 150, 3)
plt.imshow(canny, cmap='gray')

Output:

Step 5: We can see that edges are not connected. We need to connect the edges, have to make more thiker & visible. 

Python
dilated = cv2.dilate(canny, (1, 1), iterations=0)
plt.imshow(dilated, cmap='gray')

Output:

Step 6: Now we have to calculate the contour in the image & convert the image into RGB from BGR & then draw the contours.

Python
(cnt, hierarchy) = cv2.findContours(
    dilated.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.drawContours(rgb, cnt, -1, (0, 255, 0), 2)

plt.imshow(rgb)

Output:

Step 7: Printing the result

Python
print("coins in the image : ", len(cnt))

Output:

coins in the image:  5

Below is the complete implementation:

Python
# Import libraries
import cv2
import numpy as np
import matplotlib.pyplot as plt

image = cv2.imread('coins.jpg')
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

blur = cv2.GaussianBlur(gray, (11, 11), 0)
canny = cv2.Canny(blur, 30, 150, 3)
dilated = cv2.dilate(canny, (1, 1), iterations=0)

(cnt, hierarchy) = cv2.findContours(
    dilated.copy(), cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
rgb = cv2.cvtColor(image, cv2.COLOR_BGR2RGB)
cv2.drawContours(rgb, cnt, -1, (0, 255, 0), 2)


print("coins in the image : ", len(cnt))

Output: 

coins in the image :  5

Get the complete notebook link: click here.


Next Article

Similar Reads