0
votes

I've been using opencv to approximate an abnormal shape as a polygon. It runs successfully, but it would be nice to know what it is counting as a side. I would want to plot the vertices of this polygonal approximation. How would I go on about doing that?

Here's my code:

import cv2
import numpy as np

# load image
img = cv2.imread('tinytri.png')

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

# apply canny edge detection
edges = cv2.Canny(gray, 60, 160)

# apply morphology close
kernel = cv2.getStructuringElement(cv2.MORPH_RECT, (3, 3))
morph = cv2.morphologyEx(edges, cv2.MORPH_CLOSE, kernel)

# get contours and keep largest
contours = cv2.findContours(morph, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
contours = contours[0] if len(contours) == 2 else contours[1] 
big_contour = max(contours, key=cv2.contourArea)

  # draw contour
contour = img.copy()
cv2.drawContours(contour, [big_contour], 0, (0,0,255), 1)

# get number of vertices (sides)
peri = cv2.arcLength(big_contour, True)
approx = cv2.approxPolyDP(big_contour, 0.01 * peri, True)
print('number of sides:',len(approx))
1

1 Answers

0
votes

Something like that should work:

for vertex in big_contour:
    contour = cv2.circle(contour, tuple(vertex), radius, color, thickness)