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
# Python code to detect an arrow (seven-sided shape) from an image.import numpy as npimport cv2   # Reading imageimg2 = 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


… [Trackback]
[…] Find More Information here to that Topic: geeksforgeeks.org/python-detect-polygons-in-an-image-using-opencv/ […]
… [Trackback]
[…] Read More on that Topic: geeksforgeeks.org/python-detect-polygons-in-an-image-using-opencv/ […]
… [Trackback]
[…] Read More Information here on that Topic: geeksforgeeks.org/python-detect-polygons-in-an-image-using-opencv/ […]
… [Trackback]
[…] Find More Info here on that Topic: geeksforgeeks.org/python-detect-polygons-in-an-image-using-opencv/ […]