def find_pentagons(contours): pentagons = [] for ctr in contours: area = cv2.contourArea(ctr) # area test if area < 400: continue simp_ctr = cv2.approxPolyDP(ctr, 3, True) simp_area = cv2.contourArea(simp_ctr) if simp_area < 400: continue if len(simp_ctr) != 5: continue edges = [ LA.norm(a - b) for a, b in zip(simp_ctr, np.roll(simp_ctr, 2)) ] ratios = [(1 - e / edges[0])**2 for e in edges] passr = [r for r in ratios if r > 0.2] if len(passr) > 0: continue pentagons.append(simp_ctr) return pentagons if __name__ == "__main__": cam = OpenCV_Cam() cam.cam_loop(contour_proc)