Ejemplo n.º 1
0
def test_distances():
    img_ellipse = np.zeros((300, 300), dtype=np.uint8)

    center, axes, angle = (150.6, 150.34), (100.66, 50.77), 16.58

    cv2.ellipse(img_ellipse,
                intt(center),
                intt(axes),
                angle,
                0,
                360,
                255,
                thickness=2)
    contour = cv2.findContours(img_ellipse, cv2.RETR_EXTERNAL,
                               cv2.CHAIN_APPROX_SIMPLE)[1][0]

    fitted_ellipse = box_to_ellipse(*cv2.fitEllipseDirect(contour))

    contour = utils.normalize_contour(contour)

    poly_cv = cv2.ellipse2Poly(intt(center), intt(axes), round(angle), 0, 360,
                               1)
    print(utils.polygon_polygon_test(poly_cv, contour, -1))
    print(utils.polygon_polygon_test(contour, poly_cv, -1))

    poly_my = utils.ellipseF2Poly_numpy(center, axes, angle, 0, 360, 1)
    poly_my = np.round(poly_my, 0, out=poly_my).astype(np.int32)
    print(utils.polygon_polygon_test(poly_my, contour, -1))
    print(utils.polygon_polygon_test(contour, poly_my, -1))
Ejemplo n.º 2
0
    def blur_faces(self,
                   image,
                   boxes,
                   angles=None,
                   kernal_size=50,
                   padding=None):
        tempImg = image.copy()
        tempImg[:, :] = cv2.blur(tempImg[:, :], (kernal_size, kernal_size))
        # height, width, 1 channel
        maskShape = (image.shape[0], image.shape[1], 1)

        # fill it with zeros, an empty canvas
        mask = np.full(maskShape, 0, dtype=np.uint8)
        h, w = image.shape[:2]

        for (i, box) in enumerate(boxes):
            if padding is not None:
                box = u.pad_box(h, w, box, padding)

            center, dims = u.box_to_ellipse(box)

            angle = 0 if angles is None else angles[i]

            # solid ellipse on mask
            cv2.ellipse(mask, center, dims, angle, 0, 360, (255), -1)

        # get everything but the ellipse
        mask_inv = cv2.bitwise_not(mask)
        no_faces = cv2.bitwise_and(image, image, mask=mask_inv)
        blurred_faces = cv2.bitwise_and(tempImg, tempImg, mask=mask)
        composite = cv2.add(no_faces, blurred_faces)

        image[:, :] = composite[:, :]
Ejemplo n.º 3
0
 def __init__(self, center, axes, angle):
     super(FittedEllipse, self).__init__()
     (self.center, self.axes,
      self.angle) = utils.box_to_ellipse(center, axes, angle)
     self.area = self.axes[0] * self.axes[1] * math.pi
     self.aspect_ratio = min(self.axes[0], self.axes[1]) / max(
         self.axes[0], self.axes[1])
     self.center_i, self.axes_i, self.angle_i = utils.intt(
         self.center), utils.intt(self.axes), round(
             self.angle)  # cache values rounded to int
Ejemplo n.º 4
0
        def __init__(self, points):
            fit_ellipse = cv2.fitEllipseDirect(points)
            self.valid = self.validate_ellipse(fit_ellipse)
            if not self.valid:
                return

            self.center, self.axes, self.angle = utils.box_to_ellipse(
                *fit_ellipse)

            self.axis_a, self.axis_b = self.axes
            self.area = self.axis_a * self.axis_b * np.pi
            self.aspect_ratio = min(self.axes[0], self.axes[1]) / max(
                self.axes[0], self.axes[1])
            self.__poly = self.__min_rect = self.__main_axes_pts = None
Ejemplo n.º 5
0
def draw_fitted_ellipse(img, contours, color):
    pts = np.vstack([c.points() for c in contours])
    center, axes, angle = utils.box_to_ellipse(*cv2.fitEllipseDirect(pts))
    cv2.ellipse(img, utils.intt(center), utils.intt(axes), angle, 0, 360,
                color, 1)
Ejemplo n.º 6
0
 def assembled_area(parts):
     pts = np.vstack([p.points() for p in parts])
     center, axes, angle = utils.box_to_ellipse(*cv2.fitEllipseDirect(pts))
     return axes[0] * axes[1] * np.pi
Ejemplo n.º 7
0
def dist_from_fitted_ellipse(contours):
    points = np.vstack([c.points() for c in contours])
    center, exes, angle = utils.box_to_ellipse(*(cv2.fitEllipseDirect(points)))
    ellipse_poly = utils.ellipseF2Poly(center, exes, angle, 0, 360, 1)
    return utils.polygon_polygon_test(points, ellipse_poly, -1)