def __prepare_for_first_contour_connecting(self):
		# cv2.imshow("first", self.cv_image)
		dilated_image = Helper.dilate_image(self.cv_image)
		# cv2.imshow("first dilate", dilated_image)
		# self.steps.append(("con_dilated", dilated_image))
		dilated_mask = Helper.convert_image_to_mask(dilated_image)
		# cv2.imshow("mask", dilated_mask)
		self.steps.append(("con_gray", dilated_mask))
		gray_denoised_image = cv2.fastNlMeansDenoising(dilated_mask, None, 5, 7, 21)
		self.steps.append(("con_denoised", gray_denoised_image))
		# cv2.imshow("denoised", gray_denoised_image)
		threshold_image = cv2.adaptiveThreshold(gray_denoised_image,255,cv2.ADAPTIVE_THRESH_GAUSSIAN_C, cv2.THRESH_BINARY_INV, 11, 2)
		self.steps.append(("con_threshold", threshold_image))
		# cv2.imshow("threshold", threshold_image)

		# ERODED = cv2.erode(threshold_image, (2,2), iterations=1)
		# cv2.imshow("ERODED", ERODED)
		# DILATED = cv2.dilate(ERODED, (2,2), iterations=1)
		# cv2.imshow("DILATED", DILATED)
		# DENOISED = cv2.fastNlMeansDenoising(threshold_image, None, 5, 7, 21)
		# cv2.imshow("DENOISED", DENOISED)

		prepared_mask = cv2.bitwise_and(threshold_image, threshold_image, mask=self.image_masks.topo_mask)
		self.steps.append(("con_mask", prepared_mask))
		cv2.imshow('prepared', prepared_mask)
		return prepared_mask
    def __generate_green_mask(self):
        green_range = self.__get_image_in_range_from_hsv(
            MaskGenerator.low_green, MaskGenerator.high_green)
        filled_green_contours = self.__get_filled_contours_from_image(
            green_range)
        green_mask = Helper.convert_image_to_mask(filled_green_contours)
        green_mask_reduced = Helper.reduce_image_contours(
            green_mask, 200, line_thickness=cv2.FILLED)

        return green_mask_reduced
    def __generate_black_mask(self):
        black_range = self.__get_image_in_range_from_hsv(
            MaskGenerator.low_black, MaskGenerator.high_black)
        filled_contours = self.__get_filled_contours_from_image(black_range)
        contours_mask = Helper.convert_image_to_mask(filled_contours)
        dilated = Helper.dilate_image(contours_mask, array=self.dilate_array)
        black_mask = Helper.reduce_image_contours(dilated,
                                                  6,
                                                  line_thickness=cv2.FILLED)

        return black_mask
    def __generate_blue_mask(self):
        blue_range = self.__get_image_in_range_from_hsv(
            MaskGenerator.low_blue, MaskGenerator.high_blue)
        self.image_masks.steps.append(("blue_range", blue_range))
        filled_blue_contours = self.__get_filled_contours_from_image(
            blue_range)
        self.image_masks.steps.append(("blue_filled", filled_blue_contours))
        blue_mask = Helper.convert_image_to_mask(filled_blue_contours)
        dilated = Helper.dilate_image(blue_mask, array=(2, 2))
        self.image_masks.steps.append(("blue_dilated", dilated))
        blue_mask = Helper.reduce_image_contours(dilated,
                                                 15,
                                                 line_thickness=cv2.FILLED)

        return blue_mask
    def __generate_red_mask(self):
        red_range = self.__get_image_in_range_from_hsv(MaskGenerator.low_red,
                                                       MaskGenerator.high_red)
        # cv2.imshow("red range", red_range)
        filled_contours = self.__get_filled_contours_from_image(red_range)
        # cv2.imshow("filled contours", filled_contours)
        contours_mask = Helper.convert_image_to_mask(filled_contours)
        # cv2.imshow("contours mask", contours_mask)
        dilated = Helper.dilate_image(contours_mask, array=self.dilate_array)
        # cv2.imshow("dilated", dilated)
        reduced = Helper.reduce_image_contours(dilated,
                                               6,
                                               line_thickness=cv2.FILLED)
        # cv2.imshow("red range", red_range)

        return reduced
    def __get_sub_image(self):
        rows, cols, chan = self.image.shape

        sub_image = self.image[int(self.__bottom_thresh *
                                   rows):rows,  # bottom rows
                               int(self.__left_thresh *
                                   cols):int(self.__right_thresh *
                                             cols)  # middle rows
                               ]

        sub_image = cv2.resize(sub_image,
                               None,
                               fx=self.__resize_factor,
                               fy=self.__resize_factor,
                               interpolation=cv2.INTER_LINEAR)

        sub_image = Helper.convert_image_to_mask(sub_image)
        gray_denoised_image = cv2.fastNlMeansDenoising(sub_image, None, 5, 7,
                                                       21)
        threshold_image = cv2.threshold(gray_denoised_image, 225, 255,
                                        cv2.THRESH_BINARY_INV)[1]

        return sub_image