["python","image","opencv","image-processing"]
Resize an image without distortion OpenCV

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: import cv2 file = "/home/tanmay/Desktop/test_image.png" img = cv2.imread(file , 0) print(img.shape) cv2.imshow('img' , img) k = cv2.waitKey(0) if k == 27: cv2.destroyWindow('img') resize_img = cv2.resize(img , (28 , 28)) cv2.imshow('img' , resize_img) x = cv2.waitKey(0) if x == 27: cv2.destroyWindow('img') The original image is 480 x 640 (RGB, therefore I passed the 0 to get it to grayscale). Is there any way I can resize it and avoid the distortion using OpenCV or any other library perhaps? I intend to make a handwritten digit recogniser and I have trained my neural network using the MNIST data, therefore I need the image to be 28x28.
You may try below. The function will keep the aspect rate of the original image. def image_resize(image, width = None, height = None, inter = cv2.INTER_AREA): # initialize the dimensions of the image to be resized and # grab the image size dim = None (h, w) = image.shape[:2] # if both the width and height are None, then return the # original image if width is None and height is None: return image # check to see if the width is None if width is None: # calculate the ratio of the height and construct the # dimensions r = height / float(h) dim = (int(w * r), height) # otherwise, the height is None else: # calculate the ratio of the width and construct the # dimensions r = width / float(w) dim = (width, int(h * r)) # resize the image resized = cv2.resize(image, dim, interpolation = inter) # return the resized image return resized Here is an example usage. image = image_resize(image, height = 800)