Ejemplo n.º 1
0
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
Ejemplo n.º 2
0
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')
Ejemplo n.º 3
0
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