Ejemplo n.º 1
0
def colorTransferToColor(inputFile, inputDataFile, outputFileName, destColor,
                         srcColor):
    '''
	입력받은 inputFile의 정해진 부분( srcColor와 비슷한 부분 )의 색을 destColor로 변경한다.
	'''
    if utility.is_exist(inputDataFile):
        [divided_class, class_number, class_total, class_border] = \
        utility.load_result(inputDataFile)
        class_count = []
        for ct in class_total:
            class_count.append(len(ct))
    else:
        divided_class, class_number, class_total, class_border, class_count, class_length, class_color, _, _, _ = \
        segmentation.get_divided_class(inputFile)

    class_color = image_processing.get_class_color(
        utility.read_image(inputFile), class_total, class_count)

    destArea = styler.get_similar_color_area(
        divided_class, class_number, class_total, class_color, srcColor,
        240)  # Simmilar Color threshold to 200.
    part_change_image = styler.change_area_color(inputFile, outputFileName,
                                                 destColor, divided_class,
                                                 destArea)
    utility.save_image(part_change_image, outputFileName)
Ejemplo n.º 2
0
def segment(inputFile, outputFile, outputDataFile, total=True):
    divided_class, class_number, class_total, class_border, _, _, class_color, largest_mask, width, height = \
    segmentation.get_divided_class(inputFile, total=total)
    utility.save_result(
        [divided_class, class_number, class_total, class_border, largest_mask],
        outputDataFile)

    dc_image = utility.divided_class_into_image(divided_class, class_number,
                                                class_color, width, height,
                                                class_number)
    if not outputFile == None:
        utility.save_image(dc_image, outputFile)
Ejemplo n.º 3
0
def colorTransferToCoord(inputFile, inputDataFile, outputFileName, destColor,
                         destCoordList):
    '''
	입력받은 inputFile의 정해진 부분( destCoordList )의 색을 destColor로 변경한다.
	'''
    if utility.is_exist(inputDataFile):
        [divided_class, _, class_total, _] = utility.load_result(inputDataFile)
    else:
        divided_class, _, class_total, _, _, _, _, _, _, _ = \
        segmentation.get_divided_class(inputFile)
    styler.change_dest_color(inputFile, outputFileName, destColor,
                             divided_class, class_total, destCoordList)
Ejemplo n.º 4
0
def segment(inputFile, outputFile, outputDataFile, total=False):
    '''
	입력받은 파일을 Segmentation 해서 output한다.
	Output 한 결과는 조각난 사진 모음.
	'''
    divided_class, class_number, class_total, class_border, _, _, class_color, largest_mask, width, height = \
    segmentation.get_divided_class(inputFile, total=total)
    utility.save_result(
        [divided_class, class_number, class_total, class_border, largest_mask],
        outputDataFile)

    dc_image = utility.divided_class_into_image(divided_class, class_number,
                                                class_color, width, height,
                                                class_number)
    if not outputFile == None:
        utility.save_image(dc_image, outputFile)
    return divided_class, class_number, class_total, class_border
Ejemplo n.º 5
0
def colorTransferWithImage(inputFile, inputDataFile, outputFileName,
                           destImage):
    '''
	입력받은 inputFile의 색을 destImage와 비슷하게 변경해서 outputFileName에 저장한다.
	Segmentation이 된다면 자른 부분만 변경.
	'''
    if utility.is_exist(inputDataFile):
        [_, _, class_total, _] = \
        utility.load_result(inputDataFile)
        class_count = []
        for ct in class_total:
            class_count.append(len(ct))
    else:
        _, _, class_total, _, class_count, _, _, _, _, _ = \
        segmentation.get_divided_class(inputFile)

    _, _, mask_map, (width,
                     height) = segmentation.get_segmented_image(inputFile)
    changed_image = styler.set_color_with_image(inputFile, destImage, mask_map)
    utility.save_image(changed_image, outputFileName)
Ejemplo n.º 6
0
def textureTransferArea(inputFile, inputDataFile, outputFileName, destTexture,
                        srcColor):
    '''
	입력받은 inputFile의 정해진 부분( srcColor와 비슷한 색 )의 질감을 destTexture로 변경한다.
	'''
    if utility.is_exist(inputDataFile):
        [divided_class, class_number, class_total, _] = \
        utility.load_result(inputDataFile)
        class_count = []
        for ct in class_total:
            class_count.append(len(ct))
    else:
        divided_class, class_number, class_total, _, class_count, _, class_color, _, _, _ = \
        segmentation.get_divided_class(inputFile)

    class_color = image_processing.get_class_color(
        utility.read_image(inputFile), class_total, class_count)

    destArea = styler.get_similar_color_area(
        divided_class, class_number, class_total, class_color, srcColor,
        240)  # Simmilar Color threshold to 200.
    styler.change_area_style(inputFile, outputFileName, destTexture, destArea)
Ejemplo n.º 7
0
def styleTransfer(inputFile,
                  inputDataFile,
                  destFile,
                  inpaintingRandomValue,
                  ratio=(1.0, 1.0)):
    '''
	입력받은 inputFile의 색과 질감을 destFile의 색과 질감으로 임의로 변형해준다. 
	'''
    if utility.is_exist(inputDataFile):
        loadData = utility.load_result(inputDataFile)
        if len(loadData) == 5:
            # Newer Version of segmentation.
            [divided_class, class_number, class_total, _,
             largest_mask] = loadData
        else:
            [divided_class, class_number, class_total, _] = loadData
            largest_mask = None
        class_count = []
        for ct in class_total:
            class_count.append(len(ct))
    else:
        divided_class, class_number, class_total, _, class_count, _, class_color, _, _, _ = \
        segmentation.get_divided_class(inputFile)

    # Init Variables. - TODO : Change this part with largest mask.
    # largest_mask, _, _, (width, height) = segmentation.get_segmented_image(inputFile)
    # class_color = image_processing.get_class_color(utility.read_image(inputFile), class_total, class_count)
    img = utility.read_image(inputFile)
    (height, width, _) = img.shape

    file_extension = "." + inputFile.split(".")[1]
    file_base_name = inputFile.split(".")[0]

    resized_class_total = utility.changed_coords2d(class_total, ratio=ratio)
    # 중복 제거
    temp_class_total = resized_class_total
    resized_class_total = []
    for tc in temp_class_total:
        if tc not in resized_class_total:
            resized_class_total.append(tc)

    input_sample = [
        resized_class_total[i][0] for i in range(len(resized_class_total))
    ]
    if len(input_sample) < MAX_CHANGE_COLOR:
        input_sample *= int(MAX_CHANGE_COLOR // len(input_sample)) + 1
    dest_color = image_processing.get_dominant_color(destFile, clusters=8)

    next_file_name = file_base_name + "_" + str(0) + file_extension
    now_input_sample = random.sample(input_sample, MAX_CHANGE_COLOR)
    now_dest_color = random.sample(dest_color, MAX_CHANGE_COLOR)
    part_change_image = utility.read_image(inputFile)
    part_change_image = utility.resize_image(part_change_image, ratio=ratio)
    randomValue = inpaintingRandomValue

    if randomValue < -1:
        # Image Inpainting
        masking_coord = []
        for ct in resized_class_total:
            masking_coord += ct
        tempFile = utility.add_name(next_file_name, "_temp")
        tempFile = config.RESEARCH_BASE_DIR + "/temp/" + tempFile.split(
            "/")[-1]

        utility.logging("Image Inpainting Starting." + str(randomValue))
        utility.save_image(
            utility.make_whitemask_image(part_change_image, masking_coord),
            tempFile)
        change_image = image_processing.inpainting(part_change_image, tempFile)
        part_change_image = image_processing.add_up_image(
            part_change_image, change_image, masking_coord, width, height)
        now_dest_color = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
    else:
        utility.logging("Image Inpainting Do not proceed. : " +
                        str(randomValue))
        # If not earse, recoloring.
        for j in range(MAX_CHANGE_COLOR):
            change_image = styler.change_dest_color(inputFile, next_file_name, now_dest_color[j], divided_class, resized_class_total,\
             [now_input_sample[j]], save_flag=False, ratio=ratio)
            part_change_image = image_processing.add_up_image(
                part_change_image, change_image,
                resized_class_total[input_sample.index(now_input_sample[j])],
                width, height)
    return part_change_image, now_dest_color