title: What is the difference between PIL's and OpenCV's resize
body: <p>I came over the following issue: the resize functions of these two libraries behave differently. Here is a small test:</p>
  <pre><code>import numpy as np
  import PIL
  import cv2
  from matplotlib import pyplot as plt
  
  img = np.random.randn(10, 10, 3)
  SIZE = (5, 5)
  img -= img.min()
  img /= img.max()
  img = (img*255).astype(np.uint8)
  
  # Display the initial image
  plt.figure(figsize=(16,9))
  plt.imshow(img)
  plt.show()
  plt.close()
  
  # resize the image in two different ways
  img_cv2 = cv2.resize(img, dsize=SIZE, interpolation=cv2.INTER_LINEAR)
  img_pil = PIL.Image.fromarray(img).resize(SIZE, resample=PIL.Image.BILINEAR)
  
  # get the difference image and normalize it
  diff = np.abs(img_cv2.astype(np.float32) - img_pil)
  diff /= diff.max() or 1
  
  # display results
  fig, axs = plt.subplots(1, 3, figsize=(16, 9))
  axs[0].imshow(img_cv2)
  axs[1].imshow(img_pil)
  axs[2].imshow(diff)
  plt.show()
  plt.close()
  </code></pre>
  <p>My question is now: why is this happening? Is the difference in the implementation (I didn't check the code in PIL or OpenCV yet) or am I using the functions in the wrong way?</p>
  <p>Here are some example outputs: <a href="https://pasteboard.co/JjKyraM.png" rel="noreferrer">Input image</a> and <a href="https://pasteboard.co/JjKyLK2.png" rel="noreferrer">Resized images</a>.</p>