How to count objects on an image with Python

Stokry - May 3 '21 - - Dev Community

In this tutorial, you will learn how you can count the number of objects on an image with Python using CV2.

This is our test image:

enter image description here

Let's jump to the code:

First we need to import our dependencies:

import cv2
import numpy as np
Enter fullscreen mode Exit fullscreen mode

First we need to read our image:

img = cv2.imread('test.jpg')
Enter fullscreen mode Exit fullscreen mode

then we will be converting it into grayscale

img = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
Enter fullscreen mode Exit fullscreen mode

after that, we doing thresholding on image

_, thresh = cv2.threshold(img, 225, 255, cv2.THRESH_BINARY_INV)
kernal = np.ones((2, 2), np.uint8)
Enter fullscreen mode Exit fullscreen mode

then we are doing dilation process, removing black distortion:

dilation = cv2.dilate(thresh, kernal, iterations=2)
Enter fullscreen mode Exit fullscreen mode

next step is finding contour shapes:

contours, hierarchy = cv2.findContours(
    dilation, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
Enter fullscreen mode Exit fullscreen mode

Then we are getting number of contours (objects found):

objects = str(len(contours))
Enter fullscreen mode Exit fullscreen mode

We can now print number of objects on an image

text = "Obj:"+str(objects)
cv2.putText(dilation, text, (10, 25),  cv2.FONT_HERSHEY_SIMPLEX,
            0.4, (240, 0, 159), 1)
Enter fullscreen mode Exit fullscreen mode

For the lasr step we can show, original, threshold and dilation image:

cv2.imshow('Original', img)
cv2.imshow('Thresh', thresh)
cv2.imshow('Dilation', dilation)

cv2.waitKey(0)
cv2.destroyAllWindows()
Enter fullscreen mode Exit fullscreen mode

This is our final result:

enter image description here

Thank you all.

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Terabox Video Player