Open In App

Python | Detect Polygons in an Image using OpenCV

Last Updated : 13 Oct, 2019
Suggest changes
Share
Like Article
Like
Report
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 :
  • Make sure you have Python3, OpenCV, numpy already installed on your computer.
  • Basic knowledge about OpenCV would be helpful - Basics of OpenCV
  • Make sure to save the image in which shapes is to be detected in your local directory
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

Arrow

Binary Image

Binary Image

Outlined Arrow

Outlined Arrow

Similar Reads

Article Tags :
Practice Tags :