Ask Your Question

Revision history [back]

import cv2 import numpy as np

def resizeAndPad(img, size, padColor=0):

h, w = img.shape[:2]
sh, sw = size

# interpolation method
if h > sh or w > sw: # shrinking image
interp = cv2.INTER_AREA
else: # stretching image
interp = cv2.INTER_CUBIC

# aspect ratio of image
aspect = w/h  # if on Python 2, you might need to cast as a float: float(w)/h

# compute scaling and pad sizing
if aspect > 1: # horizontal image
new_w = sw
new_h = np.round(new_w/aspect).astype(int)
pad_vert = (sh-new_h)/2
pad_top, pad_bot = np.floor(pad_vert).astype(int), np.ceil(pad_vert).astype(int)
pad_left, pad_right = 0, 0
elif aspect < 1: # vertical image
new_h = sh
new_w = np.round(new_h*aspect).astype(int)
pad_horz = (sw-new_w)/2
pad_left, pad_right = np.floor(pad_horz).astype(int), np.ceil(pad_horz).astype(int)
pad_top, pad_bot = 0, 0
else: # square image
new_h, new_w = sh, sw
pad_left, pad_right, pad_top, pad_bot = 0, 0, 0, 0

# set pad color
if len(img.shape) is 3 and not isinstance(padColor, (list, tuple, np.ndarray)): # color image but only one color provided
padColor = [padColor]*3

# scale and pad
scaled_img = cv2.resize(img, (new_w, new_h), interpolation=interp)
scaled_img = cv2.copyMakeBorder(scaled_img, pad_top, pad_bot, pad_left, pad_right, borderType=cv2.BORDER_CONSTANT, value=padColor)

return scaled_img

v_img = cv2.imread('v.jpg') # vertical image scaled_v_img = resizeAndPad(v_img, (200,200), 127)

h_img = cv2.imread('h.jpg') # horizontal image scaled_h_img = resizeAndPad(h_img, (200,200), 127)

sq_img = cv2.imread('sq.jpg') # square image scaled_sq_img = resizeAndPad(sq_img, (200,200), 127)

click to hide/show revision 2
No.2 Revision

Code:

import cv2
import numpy as np

np def resizeAndPad(img, size, padColor=0):

padColor=0):

    h, w = img.shape[:2]
 sh, sw = size

 # interpolation method
 if h > sh or w > sw: # shrinking image
 interp = cv2.INTER_AREA
 else: # stretching image
 interp = cv2.INTER_CUBIC

 # aspect ratio of image
 aspect = w/h  # if on Python 2, you might need to cast as a float: float(w)/h

 # compute scaling and pad sizing
 if aspect > 1: # horizontal image
 new_w = sw
 new_h = np.round(new_w/aspect).astype(int)
 pad_vert = (sh-new_h)/2
 pad_top, pad_bot = np.floor(pad_vert).astype(int), np.ceil(pad_vert).astype(int)
 pad_left, pad_right = 0, 0
 elif aspect < 1: # vertical image
 new_h = sh
 new_w = np.round(new_h*aspect).astype(int)
 pad_horz = (sw-new_w)/2
 pad_left, pad_right = np.floor(pad_horz).astype(int), np.ceil(pad_horz).astype(int)
 pad_top, pad_bot = 0, 0
 else: # square image
 new_h, new_w = sh, sw
 pad_left, pad_right, pad_top, pad_bot = 0, 0, 0, 0

 # set pad color
 if len(img.shape) is 3 and not isinstance(padColor, (list, tuple, np.ndarray)): # color image but only one color provided
 padColor = [padColor]*3

 # scale and pad
 scaled_img = cv2.resize(img, (new_w, new_h), interpolation=interp)
 scaled_img = cv2.copyMakeBorder(scaled_img, pad_top, pad_bot, pad_left, pad_right, borderType=cv2.BORDER_CONSTANT, value=padColor)

 return scaled_img

v_img = cv2.imread('v.jpg') # vertical image
scaled_v_img = resizeAndPad(v_img, (200,200), 127)

h_img = cv2.imread('h.jpg') # horizontal image
scaled_h_img = resizeAndPad(h_img, (200,200), 127)

sq_img = cv2.imread('sq.jpg') # square image
scaled_sq_img = resizeAndPad(sq_img, (200,200), 127)

v_img = cv2.imread('v.jpg') # vertical image scaled_v_img = resizeAndPad(v_img, (200,200), 127)

h_img = cv2.imread('h.jpg') # horizontal image scaled_h_img = resizeAndPad(h_img, (200,200), 127)

sq_img = cv2.imread('sq.jpg') # square image scaled_sq_img = resizeAndPad(sq_img, (200,200), 127)

click to hide/show revision 3
No.3 Revision

Code:

import cv2 cv2 import numpy as np np

def resizeAndPad(img, size, padColor=0): h, w = img.shape[:2] sh, sw = size size

# interpolation method
 if h > sh or w > sw: # shrinking image
 interp = cv2.INTER_AREA
 else: # stretching image
 interp = cv2.INTER_CUBIC

 # aspect ratio of image
 aspect = w/h  # if on Python 2, you might need to cast as a float: float(w)/h

 # compute scaling and pad sizing
 if aspect > 1: # horizontal image
 new_w = sw
 new_h = np.round(new_w/aspect).astype(int)
 pad_vert = (sh-new_h)/2
 pad_top, pad_bot = np.floor(pad_vert).astype(int), np.ceil(pad_vert).astype(int)
 pad_left, pad_right = 0, 0
 elif aspect < 1: # vertical image
 new_h = sh
 new_w = np.round(new_h*aspect).astype(int)
 pad_horz = (sw-new_w)/2
 pad_left, pad_right = np.floor(pad_horz).astype(int), np.ceil(pad_horz).astype(int)
 pad_top, pad_bot = 0, 0
 else: # square image
 new_h, new_w = sh, sw
 pad_left, pad_right, pad_top, pad_bot = 0, 0, 0, 0

 # set pad color
 if len(img.shape) is 3 and not isinstance(padColor, (list, tuple, np.ndarray)): # color image but only one color provided
 padColor = [padColor]*3

 # scale and pad
 scaled_img = cv2.resize(img, (new_w, new_h), interpolation=interp)
 scaled_img = cv2.copyMakeBorder(scaled_img, pad_top, pad_bot, pad_left, pad_right, borderType=cv2.BORDER_CONSTANT, value=padColor)
 

return scaled_img scaled_img

v_img = cv2.imread('v.jpg') # vertical image image scaled_v_img = resizeAndPad(v_img, (200,200), 127) h_img = cv2.imread('h.jpg') # horizontal image image scaled_h_img = resizeAndPad(h_img, (200,200), 127) sq_img = cv2.imread('sq.jpg') # square image image scaled_sq_img = resizeAndPad(sq_img, (200,200), 127)

127)

click to hide/show revision 4
No.4 Revision

Code:

import cv2 
import numpy as np

np def resizeAndPad(img, size, padColor=0): h, w = img.shape[:2] sh, sw = size

size

    # interpolation method
 if h > sh or w > sw: # shrinking image
 interp = cv2.INTER_AREA
 else: # stretching image
 interp = cv2.INTER_CUBIC

 # aspect ratio of image
 aspect = w/h  # if on Python 2, you might need to cast as a float: float(w)/h

 # compute scaling and pad sizing
 if aspect > 1: # horizontal image
 new_w = sw
 new_h = np.round(new_w/aspect).astype(int)
 pad_vert = (sh-new_h)/2
 pad_top, pad_bot = np.floor(pad_vert).astype(int), np.ceil(pad_vert).astype(int)
 pad_left, pad_right = 0, 0
 elif aspect < 1: # vertical image
 new_h = sh
 new_w = np.round(new_h*aspect).astype(int)
 pad_horz = (sw-new_w)/2
 pad_left, pad_right = np.floor(pad_horz).astype(int), np.ceil(pad_horz).astype(int)
 pad_top, pad_bot = 0, 0
 else: # square image
 new_h, new_w = sh, sw
 pad_left, pad_right, pad_top, pad_bot = 0, 0, 0, 0

 # set pad color
 if len(img.shape) is 3 and not isinstance(padColor, (list, tuple, np.ndarray)): # color image but only one color provided
 padColor = [padColor]*3

 # scale and pad
 scaled_img = cv2.resize(img, (new_w, new_h), interpolation=interp)
 scaled_img = cv2.copyMakeBorder(scaled_img, pad_top, pad_bot, pad_left, pad_right, borderType=cv2.BORDER_CONSTANT, value=padColor)

return scaled_img

scaled_img v_img = cv2.imread('v.jpg') # vertical image scaled_v_img = resizeAndPad(v_img, (200,200), 127) h_img = cv2.imread('h.jpg') # horizontal image scaled_h_img = resizeAndPad(h_img, (200,200), 127) sq_img = cv2.imread('sq.jpg') # square image scaled_sq_img = resizeAndPad(sq_img, (200,200), 127)

127)
click to hide/show revision 5
No.5 Revision

Code:

import cv2 import numpy as np np

def resizeAndPad(img, size, padColor=0): h, w = img.shape[:2] sh, sw = size size

# interpolation method
 if h > sh or w > sw: # shrinking image
 interp = cv2.INTER_AREA
 else: # stretching image
 interp = cv2.INTER_CUBIC

 # aspect ratio of image
 aspect = w/h  # if on Python 2, you might need to cast as a float: float(w)/h

 # compute scaling and pad sizing
 if aspect > 1: # horizontal image
 new_w = sw
 new_h = np.round(new_w/aspect).astype(int)
 pad_vert = (sh-new_h)/2
 pad_top, pad_bot = np.floor(pad_vert).astype(int), np.ceil(pad_vert).astype(int)
 pad_left, pad_right = 0, 0
 elif aspect < 1: # vertical image
 new_h = sh
 new_w = np.round(new_h*aspect).astype(int)
 pad_horz = (sw-new_w)/2
 pad_left, pad_right = np.floor(pad_horz).astype(int), np.ceil(pad_horz).astype(int)
 pad_top, pad_bot = 0, 0
 else: # square image
 new_h, new_w = sh, sw
 pad_left, pad_right, pad_top, pad_bot = 0, 0, 0, 0

 # set pad color
 if len(img.shape) is 3 and not isinstance(padColor, (list, tuple, np.ndarray)): # color image but only one color provided
 padColor = [padColor]*3

 # scale and pad
 scaled_img = cv2.resize(img, (new_w, new_h), interpolation=interp)
 scaled_img = cv2.copyMakeBorder(scaled_img, pad_top, pad_bot, pad_left, pad_right, borderType=cv2.BORDER_CONSTANT, value=padColor)

return scaled_img

v_img = cv2.imread('v.jpg') # vertical image scaled_v_img = resizeAndPad(v_img, (200,200), 127)
h_img = cv2.imread('h.jpg') # horizontal image scaled_h_img = resizeAndPad(h_img, (200,200), 127)
sq_img = cv2.imread('sq.jpg') # square image scaled_sq_img = resizeAndPad(sq_img, (200,200), 127)
click to hide/show revision 6
No.6 Revision

Code:

import cv2 
import numpy as np

np def resizeAndPad(img, size, padColor=0): h, w = img.shape[:2] sh, sw = size

size

# interpolation method
if h > sh or w > sw: # shrinking image
interp = cv2.INTER_AREA
else: # stretching image
interp = cv2.INTER_CUBIC

# aspect ratio of image
aspect = w/h  # if on Python 2, you might need to cast as a float: float(w)/h

# compute scaling and pad sizing
if aspect > 1: # horizontal image
new_w = sw
new_h = np.round(new_w/aspect).astype(int)
pad_vert = (sh-new_h)/2
pad_top, pad_bot = np.floor(pad_vert).astype(int), np.ceil(pad_vert).astype(int)
pad_left, pad_right = 0, 0
elif aspect < 1: # vertical image
new_h = sh
new_w = np.round(new_h*aspect).astype(int)
pad_horz = (sw-new_w)/2
pad_left, pad_right = np.floor(pad_horz).astype(int), np.ceil(pad_horz).astype(int)
pad_top, pad_bot = 0, 0
else: # square image
new_h, new_w = sh, sw
pad_left, pad_right, pad_top, pad_bot = 0, 0, 0, 0

# set pad color
if len(img.shape) is 3 and not isinstance(padColor, (list, tuple, np.ndarray)): # color image but only one color provided
padColor = [padColor]*3

# scale and pad
scaled_img = cv2.resize(img, (new_w, new_h), interpolation=interp)
scaled_img = cv2.copyMakeBorder(scaled_img, pad_top, pad_bot, pad_left, pad_right, borderType=cv2.BORDER_CONSTANT, value=padColor)

return scaled_img

v_img = cv2.imread('v.jpg') # vertical image scaled_v_img = resizeAndPad(v_img, (200,200), 127)
h_img = cv2.imread('h.jpg') # horizontal image scaled_h_img = resizeAndPad(h_img, (200,200), 127)
sq_img = cv2.imread('sq.jpg') # square image scaled_sq_img = resizeAndPad(sq_img, (200,200), 127)