def Flat_Calibration():
    blobs_threshold_flat = 240  #170 on laptop
    blobs_min_size_flat = 1000
    CROP_LENGTH = 20
    flat_calibration_done = False
    while (not flat_calibration_done
           ):  # Repeat until flat flap calibration is performed correctly

        image_and_coords = get_image_and_coords(CROP_LENGTH)

        flat_image = image_and_coords["image"]
        Calibration_coords = image_and_coords["coords"]
        # flat_image = AcquireFlatImage()
        # Calibration_coords = get_calibration_coordinates(flat_image)

        print "Approximate coordinates of flap: ", Calibration_coords
        Calibration_values = ColorAveraging(flat_image, Calibration_coords,
                                            CROP_LENGTH)

        filteredImage = Orange_Flap_V5_Demo.apply_filter(
            Calibration_values, flat_image)
        possible_flaps = filteredImage.findBlobs(
            threshval=blobs_threshold_flat, minsize=blobs_min_size_flat)
        if possible_flaps > 1:
            possible_flaps = possible_flaps.sortDistance(
                point=(Calibration_coords[0], Calibration_coords[1]))
            # for i in range(0, len(possible_flaps)):
            #     filteredImage.dl().rectangle2pts(possible_flaps[i].topLeftCorner(),
            #                                      possible_flaps[i].bottomRightCorner(),Color.GREEN, width = 5)
            #     filteredImage.dl().text("%s" %i, (possible_flaps[i].topLeftCorner()), color=Color.RED)
        elif possible_flaps < 1:
            print "No possible flaps were found, starting calibration again"
            demo_images.no_flaps_found(flat_image)
            continue
        flap = possible_flaps[0]

        FlapWHRatio = round(float(flap.width()) / float(flap.height()), 4)
        result = demo_images.show_detected_orange_flap(flat_image, flap,
                                                       FlapWHRatio, "Flat")
        if result == True:
            flat_calibration_done = True
            continue
        else:
            continue

    FlapWHRatio = round(float(flap.width()) / float(flap.height()), 4)
    values = {
        "AvHue": Calibration_values["AvHue"],
        "AvSat": Calibration_values["AvSat"],
        "StdSat": Calibration_values["StdSat"],
        "FlatWHRatio": FlapWHRatio,
        "mouseX": Calibration_coords[0],
        "mouseY": Calibration_coords[1]
    }
    return values
def Slope_Calibration(AvHue, AvSat, StdSat, mouseX, mouseY):
    blobs_threshold_slope = 240  #170 on laptop
    blobs_min_size_slope = 1000
    slope_calibration_done = False
    while (not slope_calibration_done):

        demo_images.ask_for_slope_position()

        slope_image = GetImage()

        # slope_image = AcquireSlopeImage()

        filtered_image = Orange_Flap_V5_Demo.apply_filter(
            {
                "AvHue": AvHue,
                "AvSat": AvSat,
                "StdSat": StdSat
            }, slope_image)
        possible_flaps = filtered_image.findBlobs(
            threshval=blobs_threshold_slope,
            minsize=blobs_min_size_slope)  #CAN ADD SIZES AND STUFF

        if possible_flaps > 1:
            possible_flaps = possible_flaps.sortDistance(point=(mouseX,
                                                                mouseY))
            # for i in range(0, len(possible_flaps)):
            #     filtered_image.dl().rectangle2pts(possible_flaps[i].topLeftCorner(),
            #                                      possible_flaps[i].bottomRightCorner(),Color.GREEN, width = 5)
            #     filtered_image.dl().text("%s" %i, (possible_flaps[i].bottomRightCorner()), color=Color.RED)
        elif possible_flaps < 1:
            print "No flap was found, please take another picture"
            demo_images.no_flaps_found(slope_image)
            continue
        flap = possible_flaps[0]

        SlopeWHRatio = round(float(flap.width()) / float(flap.height()), 4)
        result = demo_images.show_detected_orange_flap(slope_image, flap,
                                                       SlopeWHRatio, "Slope")
        if result == True:
            slope_calibration_done = True
            continue
        else:
            continue

    SlopeWHRatio = round(float(flap.width()) / float(flap.height()), 4)
    return SlopeWHRatio
def Flat_Calibration():
    blobs_threshold_flat = 240 #170 on laptop
    blobs_min_size_flat = 1000
    CROP_LENGTH = 20
    flat_calibration_done = False
    while (not flat_calibration_done):  # Repeat until flat flap calibration is performed correctly

        image_and_coords = get_image_and_coords(CROP_LENGTH)

        flat_image = image_and_coords["image"]
        Calibration_coords = image_and_coords["coords"]
        # flat_image = AcquireFlatImage()
        # Calibration_coords = get_calibration_coordinates(flat_image)

        print "Approximate coordinates of flap: ", Calibration_coords
        Calibration_values = ColorAveraging(flat_image, Calibration_coords, CROP_LENGTH)

        filteredImage = Orange_Flap_V5_Demo.apply_filter(Calibration_values, flat_image)
        possible_flaps = filteredImage.findBlobs(threshval = blobs_threshold_flat, minsize=blobs_min_size_flat)
        if possible_flaps > 1:
            possible_flaps = possible_flaps.sortDistance(point =(Calibration_coords[0], Calibration_coords[1]))
            # for i in range(0, len(possible_flaps)):
            #     filteredImage.dl().rectangle2pts(possible_flaps[i].topLeftCorner(),
            #                                      possible_flaps[i].bottomRightCorner(),Color.GREEN, width = 5)
            #     filteredImage.dl().text("%s" %i, (possible_flaps[i].topLeftCorner()), color=Color.RED)
        elif possible_flaps < 1:
            print "No possible flaps were found, starting calibration again"
            demo_images.no_flaps_found(flat_image)
            continue
        flap = possible_flaps[0]

        FlapWHRatio = round(float(flap.width()) / float(flap.height()), 4)
        result = demo_images.show_detected_orange_flap(flat_image,flap,FlapWHRatio, "Flat")
        if result == True:
            flat_calibration_done = True
            continue
        else:
            continue

    FlapWHRatio = round(float(flap.width()) / float(flap.height()), 4)
    values = {"AvHue": Calibration_values["AvHue"], "AvSat": Calibration_values["AvSat"],
              "StdSat": Calibration_values["StdSat"], "FlatWHRatio": FlapWHRatio,
              "mouseX": Calibration_coords[0], "mouseY": Calibration_coords[1]}
    return values
def Slope_Calibration(AvHue,AvSat,StdSat,mouseX,mouseY):
    blobs_threshold_slope = 240 #170 on laptop
    blobs_min_size_slope = 1000
    slope_calibration_done = False
    while (not slope_calibration_done):

        demo_images.ask_for_slope_position()

        slope_image = GetImage()

        # slope_image = AcquireSlopeImage()

        filtered_image = Orange_Flap_V5_Demo.apply_filter({"AvHue": AvHue, "AvSat": AvSat, "StdSat": StdSat}, slope_image)
        possible_flaps = filtered_image.findBlobs(threshval = blobs_threshold_slope, minsize=blobs_min_size_slope)   #CAN ADD SIZES AND STUFF

        if possible_flaps > 1:
            possible_flaps = possible_flaps.sortDistance(point =(mouseX, mouseY))
            # for i in range(0, len(possible_flaps)):
            #     filtered_image.dl().rectangle2pts(possible_flaps[i].topLeftCorner(),
            #                                      possible_flaps[i].bottomRightCorner(),Color.GREEN, width = 5)
            #     filtered_image.dl().text("%s" %i, (possible_flaps[i].bottomRightCorner()), color=Color.RED)
        elif possible_flaps < 1:
            print "No flap was found, please take another picture"
            demo_images.no_flaps_found(slope_image)
            continue
        flap = possible_flaps[0]

        SlopeWHRatio = round(float(flap.width()) / float(flap.height()), 4)
        result = demo_images.show_detected_orange_flap(slope_image,flap,SlopeWHRatio, "Slope")
        if result == True:
            slope_calibration_done = True
            continue
        else:
            continue

    SlopeWHRatio = round(float(flap.width()) / float(flap.height()), 4)
    return SlopeWHRatio