Approximating a contour
A lot of contours that we encounter in real life are noisy. This means that the contours don't look smooth, and hence our analysis takes a hit. So, how do we deal with this? One way to go about this would be to get all the points on the contour and then approximate it with a smooth polygon.
Let's consider the boomerang image again. If you approximate the contours using various thresholds, you will see the contours changing their shapes. Let's start with a factor of 0.05:
![](https://static.packt-cdn.com/products/9781788396905/graphics/7ecdb10a-9ea5-4dfc-90cd-ae744827da8e.png)
If you reduce this factor, the contours will get smoother. Let's make it 0.01:
![](https://static.packt-cdn.com/products/9781788396905/graphics/5f68ef48-ec8f-49fd-9f80-71fccc33f977.png)
If you make it really small, say 0.00001, then it will look like the original image:
![](https://static.packt-cdn.com/products/9781788396905/graphics/f26661a3-0577-4abe-b44e-92cd7160ef48.png)
The following code represents how to convert those contours into approximate smoothing of polygons:
import sys import cv2 import numpy as np if __name__=='__main__': # Input image containing all the different shapes img1 = cv2.imread(sys.argv[1]) # Extract all the contours from the input image input_contours = get_all_contours...