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)
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))])
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))])
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)
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)
def puzzle(): pieces, rows, columns = image_helpers.flatten_image(image, PIECE_SIZE) np.random.shuffle(pieces) return image_helpers.assemble_image(pieces, rows, columns)
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)