code: def resolve_image_as_pil(self, image_url, coords=None):
          
          files = self.mets.find_files(url=image_url)
          if files:
              image_filename = self.download_file(files[0]).local_filename
          else:
              image_filename = self.download_url(image_url)
  
          if image_url not in self.image_cache['pil']:
              self.image_cache['pil'][image_url] = Image.open(image_filename)
  
          pil_image = self.image_cache['pil'][image_url]
  
          if coords is None:
              return pil_image
          if image_url not in self.image_cache['cv2']:
              log.debug("Converting PIL to OpenCV: %s", image_url)
              color_conversion = cv2.COLOR_GRAY2BGR if pil_image.mode in ('1', 'L') else  cv2.COLOR_RGB2BGR
              pil_as_np_array = np.array(pil_image).astype('uint8') if pil_image.mode == '1' else np.array(pil_image)
              self.image_cache['cv2'][image_url] = cv2.cvtColor(pil_as_np_array, color_conversion)
          cv2_image = self.image_cache['cv2'][image_url]
          poly = np.array(coords, np.int32)
          log.debug("Cutting region %s from %s", coords, image_url)
          region_cut = cv2_image[
              np.min(poly[:, 1]):np.max(poly[:, 1]),
              np.min(poly[:, 0]):np.max(poly[:, 0])
          ]
          return Image.fromarray(region_cut)
docs: Resolve an image URL to a PIL image.
  
          Args:
              coords (list) : Coordinates of the bounding box to cut from the image
  
          Returns:
              Image or region in image as PIL.Image