Example #1
0
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)
Example #2
0
    return frame

    
def find_milkbox(contours):
    pentagons = []
    for ctr in contours:
        vecs = zip(ctr, np.roll(ctr, 1))
        normalized_vecs = []
        for vec in vecs: 
            length = LA.norm(vec[0] - vec[1])
            norm_vec = (vec[0] - vec[1]) / length
            normalized_vecs.append(norm_vec)
        
        paired_vecs = zip(normalized_vecs, np.roll(normalized_vecs, 2))
        count = 0
        for pair in paired_vecs:
            angle = np.inner(pair[0], pair[1])
            if angle < 0.05:
                count = count + 1
        if count != 2:
            continue

        pentagons.append(ctr)
        
    return pentagons

    
if __name__ == "__main__":
    cam = OpenCV_Cam()
    cam.cam_loop(contour_proc)