def select_image(): # grab a reference to the image panels global panelA, panelB # open a file chooser dialog and allow the user to select an input # image path = tkFileDialog.askopenfilename() # ensure a file path was selected if len(path) > 0: # load the image from disk, convert it to grayscale, and detect # edges in it image = t.readImage(path) shortestPath = t.solveMaze(image, (0,0), (19,19), 20, 20) img = image_enhancer.highlightPath(image, (0,0), (19,19), shortestPath) # convert the images to PIL format... image = Image.fromarray(image) edged = Image.fromarray(img) # ...and then to ImageTk format image = ImageTk.PhotoImage(image) edged = ImageTk.PhotoImage(edged) # if the panels are None, initialize them if panelA is None or panelB is None: # the first panel will store our original image panelA = Label(image=image) panelA.image = image panelA.pack(side="left", padx=10, pady=10) # while the second panel will store the edge map panelB = Label(image=edged) panelB.image = edged panelB.pack(side="right", padx=10, pady=10) # otherwise, update the image panels else: # update the pannels panelA.configure(image=image) panelB.configure(image=edged) panelA.image = image panelB.image = edged
CELL_SIZE) # number of cells in height of maze image no_cells_width = int(width / CELL_SIZE) # number of cells in width of maze image initial_point = (0, 0) # start point coordinates of maze final_point = ((no_cells_height - 1), (no_cells_width - 1) ) # end point coordinates of maze try: shortestPath = solveMaze(original_binary_img, initial_point, final_point, no_cells_height, no_cells_width) if len(shortestPath) > 2: img = image_enhancer.highlightPath(original_binary_img, initial_point, final_point, shortestPath) else: print( '\n[ERROR] shortestPath returned by solveMaze function is not complete !\n' ) exit() except TypeError as type_err: print( '\n[ERROR] solveMaze function is not returning shortest path in maze image in expected format !\n' ) exit()
def isInPath(i, j, shortestPath, cell_img): ######################################################################### # NOTE: YOU ARE NOT ALLOWED TO MAKE ANY CHANGE TO THIS FUNCTION # # Function Name: main # Inputs: None # Outputs: None # Purpose: the function first takes 'maze00.jpg' as input and solves the maze by calling computeSum # function, it then asks the user whether to repeat the same on all maze images # present in 'task_1c_images' folder or not if __name__ != '__main__': curr_dir_path = os.getcwd() # Importing task_1a and image_enhancer script try: task_1a_dir_path = curr_dir_path + '/../../Task 1A/codes' sys.path.append(task_1a_dir_path) import task_1a import image_enhancer except Exception as e: print('\ntask_1a.py or image_enhancer.pyc file is missing from Task 1A folder !\n') exit() if __name__ == '__main__': curr_dir_path = os.getcwd() img_dir_path = curr_dir_path + '/../task_1c_images/' # path to directory of 'task_1c_images' file_num = 0 img_file_path = img_dir_path + 'maze0' + str(file_num) + '.jpg' # path to 'maze00.jpg' image file # Importing task_1a and image_enhancer script try: task_1a_dir_path = curr_dir_path + '/../../Task 1A/codes' sys.path.append(task_1a_dir_path) import task_1a import image_enhancer except Exception as e: print('\n[ERROR] task_1a.py or image_enhancer.pyc file is missing from Task 1A folder !\n') exit() # modify the task_1a.CELL_SIZE to 40 since maze images # in task_1c_images folder have cell size of 40 pixels task_1a.CELL_SIZE = 40 print('\n============================================') print('\nFor maze0' + str(file_num) + '.jpg') try: original_binary_img = task_1a.readImage(img_file_path) height, width = original_binary_img.shape except AttributeError as attr_error: print('\n[ERROR] readImage function is not returning binary form of original image in expected format !\n') exit() no_cells_height = int(height/task_1a.CELL_SIZE) # number of cells in height of maze image no_cells_width = int(width/task_1a.CELL_SIZE) # number of cells in width of maze image initial_point = (0, 0) # start point coordinates of maze final_point = ((no_cells_height-1),(no_cells_width-1)) # end point coordinates of maze try: shortestPath = task_1a.solveMaze(original_binary_img, initial_point, final_point, no_cells_height, no_cells_width) if len(shortestPath) > 2: img = image_enhancer.highlightPath(original_binary_img, initial_point, final_point, shortestPath) else: print('\n[ERROR] shortestPath returned by solveMaze function is not complete !\n') exit() except TypeError as type_err: print('\n[ERROR] solveMaze function is not returning shortest path in maze image in expected format !\n') exit() print('\nShortest Path = %s \n\nLength of Path = %d' % (shortestPath, len(shortestPath))) digits_list, digits_on_path, sum_of_digits_on_path = computeSum(img_file_path, shortestPath) print('\nDigits in the image = ', digits_list) print('\nDigits on shortest path in the image = ', digits_on_path) print('\nSum of digits on shortest path in the image = ', sum_of_digits_on_path) print('\n============================================') cv2.imshow('canvas0' + str(file_num), img) cv2.waitKey(0) cv2.destroyAllWindows() choice = input('\nWant to run your script on all maze images ? ==>> "y" or "n": ') if choice == 'y': file_count = len(os.listdir(img_dir_path)) for file_num in range(file_count): img_file_path = img_dir_path + 'maze0' + str(file_num) + '.jpg' # path to 'maze00.jpg' image file print('\n============================================') print('\nFor maze0' + str(file_num) + '.jpg') try: original_binary_img = task_1a.readImage(img_file_path) height, width = original_binary_img.shape except AttributeError as attr_error: print('\n[ERROR] readImage function is not returning binary form of original image in expected format !\n') exit() no_cells_height = int(height/task_1a.CELL_SIZE) # number of cells in height of maze image no_cells_width = int(width/task_1a.CELL_SIZE) # number of cells in width of maze image initial_point = (0, 0) # start point coordinates of maze final_point = ((no_cells_height-1),(no_cells_width-1)) # end point coordinates of maze try: shortestPath = task_1a.solveMaze(original_binary_img, initial_point, final_point, no_cells_height, no_cells_width) if len(shortestPath) > 2: img = image_enhancer.highlightPath(original_binary_img, initial_point, final_point, shortestPath) else: print('\n[ERROR] shortestPath returned by solveMaze function is not complete !\n') exit() except TypeError as type_err: print('\n[ERROR] solveMaze function is not returning shortest path in maze image in expected format !\n') exit() print('\nShortest Path = %s \n\nLength of Path = %d' % (shortestPath, len(shortestPath))) digits_list, digits_on_path, sum_of_digits_on_path = computeSum(img_file_path, shortestPath) print('\nDigits in the image = ', digits_list) print('\nDigits on shortest path in the image = ', digits_on_path) print('\nSum of digits on shortest path in the image = ', sum_of_digits_on_path) print('\n============================================') cv2.imshow('canvas0' + str(file_num), img) cv2.waitKey(0) cv2.destroyAllWindows() else: print('')