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