Ejemplo n.º 1
0
 def penalize(self):
     pieces = self.penalize_image
     rows = self.rows
     cols = self.columns
     for row in range(0, rows):
         for col in range(0, cols):
             if pieces[row][col].id == -1:
                 self.adjoin_assistance(row, col)
                 self.do_local_select(pieces, row, col)
                 # self.check_around(pieces, row, col)
     return image_helpers.assemble_image(
         [each.image for each in pieces.flatten()], self.rows, self.columns)
Ejemplo n.º 2
0
def create_puzzle(image_path, output_path, piece_size, position_file):
    """Creates jigsaw puzzle from input image"""
    image = cv2.imread(image_path)
    # 分割图片
    pieces, rows, columns = image_helpers.flatten_image(
        image, piece_size, False)

    # Create puzzle by stacking pieces
    puzzle = image_helpers.assemble_image(pieces, rows, columns, True)
    # 保存图片
    cv2.imwrite(str(output_path).replace(".jpg", "_format.jpg"), puzzle)
    # Randomize pieces in order to make puzzle
    np.random.shuffle(pieces)

    # Create puzzle by stacking pieces
    puzzle = image_helpers.assemble_image(pieces, rows, columns, True)

    save_piece_position(pieces, rows, columns, position_file)

    cv2.imwrite(output_path, puzzle)
    print_messages(["Puzzle created with {} pieces".format(len(pieces))])
Ejemplo n.º 3
0
def create_puzzle(image_path, output_path, piece_size, pieces_n):
    """Creates jigsaw puzzle from input image"""
    image = cv2.imread(image_path)

    if pieces_n > 0:
        width = image.shape[1]
        piece_size = int(width / pieces_n)

    pieces, rows, columns = image_helpers.flatten_image_stripe(
        image, piece_size)

    # Randomize pieces in order to make puzzle
    np.random.shuffle(pieces)

    # Create puzzle by stacking pieces
    puzzle = image_helpers.assemble_image(pieces, rows, columns)

    cv2.imwrite(output_path, puzzle)
    print_messages(["Puzzle created with {} pieces".format(len(pieces))])
Ejemplo n.º 4
0
 def to_image(self):
     """Converts individual to showable image"""
     pieces = [piece.image for piece in self.pieces]
     return image_helpers.assemble_image(pieces, self.rows, self.columns)
Ejemplo n.º 5
0
def create_puzzle(image_path, piece_size):
    image = misc.imread(image_path)
    pieces, rows, columns = image_helpers.flatten_image(image, piece_size)
    np.random.shuffle(pieces)
    return image_helpers.assemble_image(pieces, rows, columns)
Ejemplo n.º 6
0
def puzzle():
    pieces, rows, columns = image_helpers.flatten_image(image, PIECE_SIZE)
    np.random.shuffle(pieces)
    return image_helpers.assemble_image(pieces, rows, columns)
Ejemplo n.º 7
0
 def best_adjoin(self, piece_size):
     pieces = np.reshape(self.pieces, (self.rows, self.columns))
     empty_image = np.zeros(
         (piece_size, piece_size, pieces[0][0].shape()[2]))
     empty_piece = Piece(empty_image, -1)
     for row in range(self.rows):
         for col in range(self.columns):
             if row == 0:
                 if col == 0 and ImageAnalysis.in_range(pieces[row][col].id, "D", pieces[row + 1][col].id) \
                         and ImageAnalysis.in_range(pieces[row][col].id, "R", pieces[row][col + 1].id):
                     continue
                 if col < self.columns - 1 and ImageAnalysis.in_range(pieces[row][col].id, "D",
                                                                      pieces[row + 1][col].id) \
                         and ImageAnalysis.in_range(pieces[row][col].id, "R", pieces[row][col + 1].id):
                     continue
                 if col == self.columns - 1 and ImageAnalysis.in_range(pieces[row][col].id, "D",
                                                                       pieces[row + 1][col].id) \
                         and ImageAnalysis.in_range(pieces[row][col].id, "L", pieces[row][col - 1].id):
                     continue
             if 0 < row < self.rows - 1:
                 if col == 0 and ImageAnalysis.in_range(pieces[row][col].id, "D", pieces[row + 1][col].id) \
                         and ImageAnalysis.in_range(pieces[row][col].id, "R", pieces[row][col + 1].id):
                     continue
                 if col < self.columns - 1 and ImageAnalysis.in_range(pieces[row][col].id, "D",
                                                                      pieces[row + 1][col].id) \
                         and ImageAnalysis.in_range(pieces[row][col].id, "R", pieces[row][col + 1].id):
                     continue
                 if col == self.columns - 1 and ImageAnalysis.in_range(pieces[row][col].id, "D",
                                                                       pieces[row + 1][col].id) \
                         and ImageAnalysis.in_range(pieces[row][col].id, "L", pieces[row][col - 1].id):
                     continue
             if row == self.rows - 1:
                 if col == 0 and ImageAnalysis.in_range(pieces[row][col].id, "T", pieces[row - 1][col].id) \
                         and ImageAnalysis.in_range(pieces[row][col].id, "R", pieces[row][col + 1].id):
                     continue
                 if col < self.columns - 1 and ImageAnalysis.in_range(pieces[row][col].id, "R",
                                                                      pieces[row][col + 1].id) \
                         and ImageAnalysis.in_range(pieces[row][col].id, "T", pieces[row - 1][col].id):
                     continue
                 if col == self.columns - 1 and ImageAnalysis.in_range(pieces[row][col].id, "L",
                                                                       pieces[row][col - 1].id) \
                         and ImageAnalysis.in_range(pieces[row][col].id, "T", pieces[row - 1][col].id):
                     continue
             # if row == 0:
             #     if col == 0 and ImageAnalysis.best_match(pieces[row][col].id, "D") == pieces[row + 1][col].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "R") == pieces[row][col + 1].id:
             #         continue
             #     if col < self.columns - 1 and ImageAnalysis.best_match(pieces[row][col].id, "D") == pieces[row + 1][col].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "R") == pieces[row][col + 1].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "L") == pieces[row][col - 1].id:
             #         continue
             #     if col == self.columns - 1 and ImageAnalysis.best_match(pieces[row][col].id, "D") == pieces[row + 1][col].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "L") == pieces[row][col - 1].id:
             #         continue
             # if 0 < row < self.rows - 1:
             #     if col == 0 and ImageAnalysis.best_match(pieces[row][col].id, "D") == pieces[row + 1][col].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "T") == pieces[row - 1][col].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "R") == pieces[row][col + 1].id:
             #         continue
             #     if col < self.columns - 1 and ImageAnalysis.best_match(pieces[row][col].id, "T") == pieces[row - 1][col].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "D") == pieces[row + 1][col].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "L") == pieces[row][col - 1].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "R") == pieces[row][col + 1].id:
             #         continue
             #     if col == self.columns - 1 and ImageAnalysis.best_match(pieces[row][col].id, "T") == pieces[row - 1][col].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "D") == pieces[row + 1][col].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "L") == pieces[row][col - 1].id:
             #         continue
             # if row == self.rows - 1:
             #     if col == 0 and ImageAnalysis.best_match(pieces[row][col].id, "T") == pieces[row - 1][col].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "R") == pieces[row][col + 1].id:
             #         continue
             #     if col < self.columns - 1 and ImageAnalysis.best_match(pieces[row][col].id, "R") == pieces[row][col + 1].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "L") == pieces[row][col - 1].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "T") == pieces[row - 1][col].id:
             #         continue
             #     if col == self.columns - 1 and ImageAnalysis.best_match(pieces[row][col].id, "L") == pieces[row][col - 1].id \
             #             and ImageAnalysis.best_match(pieces[row][col].id, "T") == pieces[row - 1][col].id:
             #         continue
             pieces[row][col] = empty_piece
     self.penalize_image = pieces
     return image_helpers.assemble_image(
         [each.image for each in pieces.flatten()], self.rows, self.columns)