def trapped_ball_processed(binary, in_image=None, do_merge=True): fills = [] result = binary fill = trapped_ball_fill_multi(result, 3, method='max') fills += fill result = mark_fill(result, fill) print('result num 3: ', len(fills)) fill = trapped_ball_fill_multi(result, 2, method=None) fills += fill result = mark_fill(result, fill) print('result num 2: ', len(fills)) fill = trapped_ball_fill_multi(result, 1, method=None) fills += fill result = mark_fill(result, fill) print('result num 1: ', len(fills)) fill = flood_fill_multi(result) fills += fill print('flood_fill_multi num 1: ', len(fills)) fillmap = build_fill_map(result, fills) # print('fillmap num: ', len(np.unique(fillmap))) if do_merge: if in_image is None: fillmap = merge_fill(fillmap, max_iter=10) else: fillmap = my_merge_fill(in_image, fillmap) fillmap = thinning(fillmap) return fillmap
def get_region_picture(path): ''' 获取不规则形状的图片,背景是黑色0,方便rotate ''' im = cv2.imread(path, cv2.IMREAD_GRAYSCALE) ret, binary = cv2.threshold(im, 220, 255, cv2.THRESH_BINARY) fills = [] result = binary fill = trapped_ball_fill_multi(result, 3, method='max') fills += fill result = mark_fill(result, fill) fill = trapped_ball_fill_multi(result, 2, method=None) fills += fill result = mark_fill(result, fill) fill = trapped_ball_fill_multi(result, 1, method=None) fills += fill result = mark_fill(result, fill) fill = flood_fill_multi(result) fills += fill fillmap = build_fill_map(result, fills) fillmap = merge_fill(fillmap) fillmap = thinning(fillmap) #获得region mask for i in range(len(fillmap[:, 0])): for j in range(len(fillmap[0, :])): if fillmap[i, j] == 0: fillmap[i, j] = 1 else: fillmap[i, j] = 0 #获得region picture im = cv2.imread(path) # plt.imshow(im) rgb_fillmap = np.zeros(im.shape) rgb_fillmap[:, :, 0] = fillmap rgb_fillmap[:, :, 1] = fillmap rgb_fillmap[:, :, 2] = fillmap im = im * rgb_fillmap return im.astype('uint8')
def get_mask(path): ''' 提取衣服的mask 返回numpy数组 ''' from linefiller.trappedball_fill import trapped_ball_fill_multi, flood_fill_multi, mark_fill, build_fill_map, merge_fill, \ show_fill_map from linefiller.thinning import thinning im = cv2.imread(path, cv2.IMREAD_GRAYSCALE) ret, binary = cv2.threshold(im, 220, 255, cv2.THRESH_BINARY) fills = [] result = binary fill = trapped_ball_fill_multi(result, 3, method='max') fills += fill result = mark_fill(result, fill) fill = trapped_ball_fill_multi(result, 2, method=None) fills += fill result = mark_fill(result, fill) fill = trapped_ball_fill_multi(result, 1, method=None) fills += fill result = mark_fill(result, fill) fill = flood_fill_multi(result) fills += fill fillmap = build_fill_map(result, fills) fillmap = merge_fill(fillmap) for i in range(len(fillmap[:, 0])): for j in range(len(fillmap[0, :])): if fillmap[i, j] == 1: fillmap[i, j] = 0 else: fillmap[i, j] = 1 return fillmap