A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://www.geeksforgeeks.org/python/python-detect-polygons-in-an-image-using-opencv/ below:

Python | Detect Polygons in an Image using OpenCV

Python | Detect Polygons in an Image using OpenCV

Last Updated : 12 Jul, 2025

Approach :

The approach we would be used to detect the shape of a given polygon will be based on classifying the detected shape on the basis of a number of sides it has. For example, if the detected polynomial has 3 sides, then it could be considered as a triangle, if the polynomial has 4 sides then it could be classified as a square or a rectangle.

Prerequisite : Implementation :

In the following code, we will be detecting an arrow-shaped object from the image 'arrow.jpg'. The shape will be detected on the basis of the number of sides it has

Code: Python program to detect polygons in an image Python3
# Python code to detect an arrow (seven-sided shape) from an image.
import numpy as np
import cv2
 
# Reading image
img2 = cv2.imread('arrow.jpg', cv2.IMREAD_COLOR)
 
# Reading same image in another variable and 
# converting to gray scale.
img = cv2.imread('arrow.jpg', cv2.IMREAD_GRAYSCALE)
 
# Converting image to a binary image 
# (black and white only image).
_,threshold = cv2.threshold(img, 110, 255, 
                            cv2.THRESH_BINARY)
 
# Detecting shapes in image by selecting region 
# with same colors or intensity.
contours,_=cv2.findContours(threshold, cv2.RETR_TREE,
                            cv2.CHAIN_APPROX_SIMPLE)
 
# Searching through every region selected to 
# find the required polygon.
for cnt in contours :
    area = cv2.contourArea(cnt)
 
    # Shortlisting the regions based on there area.
    if area > 400: 
        approx = cv2.approxPolyDP(cnt, 
                                  0.009 * cv2.arcLength(cnt, True), True)
 
        # Checking if the no. of sides of the selected region is 7.
        if(len(approx) == 7): 
            cv2.drawContours(img2, [approx], 0, (0, 0, 255), 5)
 
# Showing the image along with outlined arrow.
cv2.imshow('image2', img2) 
 
# Exiting the window if 'q' is pressed on the keyboard.
if cv2.waitKey(0) & 0xFF == ord('q'): 
    cv2.destroyAllWindows()
Note :

The parameter '110' in threshold could be adjusted as per need if the object is of different colour and is based on trial and error.

Result :

Image with arrow

Binary Image

Outlined Arrow



RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4