Resize an image without distortion OpenCV

前端 未结 9 1994
日久生厌
日久生厌 2020-12-07 12:30

I am using python 3 and latest version of openCV. I am trying to resize an image using the resize function provided but after resizing the image is very distorted. Code :

9条回答
  •  孤城傲影
    2020-12-07 13:20

    The answer, provided by @vijay jha is too case specific. Also includes additional unnecessary padding. I propose fixed code below:

    def resize2SquareKeepingAspectRation(img, size, interpolation):
      h, w = img.shape[:2]
      c = None if len(img.shape) < 3 else img.shape[2]
      if h == w: return cv2.resize(img, (size, size), interpolation)
      if h > w: dif = h
      else:     dif = w
      x_pos = int((dif - w)/2.)
      y_pos = int((dif - h)/2.)
      if c is None:
        mask = np.zeros((dif, dif), dtype=img.dtype)
        mask[y_pos:y_pos+h, x_pos:x_pos+w] = img[:h, :w]
      else:
        mask = np.zeros((dif, dif, c), dtype=img.dtype)
        mask[y_pos:y_pos+h, x_pos:x_pos+w, :] = img[:h, :w, :]
      return cv2.resize(mask, (size, size), interpolation)
    

    The code resizes an image making it square and keeping aspect ration at the same time. Also the code is suitable for 3 channels (colored) images as well. Example of usage:

    resized = resize2SquareKeepingAspectRation(img, size, cv2.INTER_AREA)
    

提交回复
热议问题