def test_gridify_generates_correct_sequence_of_borders(self): # get the test image which is constructed as follows: grid_image_path = path.join(this_path, 'grid (tlbr padding - 1, 2, 3, 4).png') grid_image = cv2.imread(grid_image_path) self.assertIsNotNone(grid_image) # just confirm file loaded # 4 rows, 2 columns dimensions = (4, 2) # (top, left, bottom, right) padding: # = (1px, 2px, 3px, 4px) # = (1/5, 2/10, 3/5, 4/10) # = (0.2, 0.2, 0.6, 0.4) cell_padding = 0.2, 0.2, 0.6, 0.4 # ==> remaining cell image shape is 1 row, 4 columns (3 channels) channels = 3 cell_shape_spec = (1, 4, channels) # 1 row, 4 columns, 3 channels # ==> content of each cell image should be exactly the colored parts # in the image as follows: red = (0, 0, 255) green = (0, 255, 0) blue = (255, 0, 0) white = (255, 255, 255) colors_spec = [[red, white], [green, red], [blue, green], [white, blue]] colors_spec = numpy.asarray(colors_spec) # gridify the image and confirm all sub images match the above specs grid = Grid(dimensions, cell_padding) for grid_position, borders in grid.borders_by_grid_position(grid_image): top, left, bottom, right = borders # confirm the size cell_shape = (bottom - top, right - left, channels) self.assertEqual(cell_shape, cell_shape_spec) spec_pixel = colors_spec[grid_position] # confirm the color for each pixel in the cell for pixel_row in range(top, bottom): for pixel_col in range(left, right): p = pixel_row, pixel_col image_pixel = grid_image[p] self.assertTrue(numpy.all(image_pixel == spec_pixel), 'Pixel in grid cell:' '\n{}: {}' '\nunexpectedly not equal to specification:' '\n{}'.format(grid_position, image_pixel, spec_pixel))