def segment(self, image: Image) -> Image: image_hsv = image.to_hsv() image_mask = cv2.inRange(image_hsv.to_numpy(), self._mask_lower, self._mask_higher) image_mask = cv2.bitwise_not(image_mask) return Image(image_mask, GrayColor())
def set_background(self, background_image: Image, z_value: float): background_hsv = background_image.to_hsv() background_flattened = self._flatten_background( background_hsv.to_numpy()) low = [] high = [] for i in range(3): mu = background_flattened[i].mean() sigma = background_flattened[i].std() deviation = z_value * sigma low.append(self._restrict(mu - deviation)) high.append(self._restrict(mu + deviation)) self._mask_lower = np.array([low[0], low[1], low[2]]) self._mask_higher = np.array([high[0], high[1], high[2]])
def to_gray(self, context: Image) -> Image: return context.clone()
def to_hsv(self, context: Image) -> Image: return context.to_rgb().to_hsv()
def to_bgr(self, context: Image) -> Image: bgr_data = cv2.cvtColor(context.data, cv2.COLOR_GRAY2BGR) return Image(bgr_data, BGRColor())
def to_gray(self, context: Image) -> Image: return context.to_rgb().to_gray()
def to_rgb(self, context: Image) -> Image: rgb_data = cv2.cvtColor(context.data, cv2.COLOR_GRAY2RGB) return Image(rgb_data, RGBColor())
def to_hsv(self, context: Image) -> Image: return context.clone()
def to_gray(self, context: Image) -> Image: gray_data = cv2.cvtColor(context.data, cv2.COLOR_RGB2GRAY) return Image(gray_data, GrayColor())
def to_hsv(self, context: Image) -> Image: hsv_data = cv2.cvtColor(context.data, cv2.COLOR_RGB2HSV) return Image(hsv_data, HSVColor())
def compute(self, image: 'Image') -> 'Image': _, data = cv2.connectedComponents(image.to_numpy()) return Image(data, GrayColor())
def select_roi(window: NamedWindow, image: Image) -> BoundingBox: x1, y1, w, h = cv2.selectROI(window.name, image.to_numpy()) if w == 0 or h == 0: raise Exception('no selection') return BoundingBox(Point(x1, y1), Point(x1 + w - 1, y1 + h - 1))