调整图像大小而不失真 OpenCV

新手上路,请多包涵

我正在使用 python 3 和最新版本的 openCV。我正在尝试使用提供的调整大小功能调整图像大小,但在调整大小后图像非常失真。代码 :

 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')

原始图像为 480 x 640(RGB 因此我通过 0 将其转换为灰度)

有什么办法可以调整它的大小并避免使用 OpenCV 或任何其他库的失真?我打算制作一个手写数字识别器,并且我已经使用 MNIST 数据训练了我的神经网络,因此我需要图像为 28x28。

原文由 Tanmay Bhatnagar 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

你可以试试下面。该功能将保持原始图像的宽高比。

 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

这是一个示例用法。

 image = image_resize(image, height = 800)

希望这可以帮助。

原文由 thewaywewere 发布,翻译遵循 CC BY-SA 3.0 许可协议

如果您需要修改图像分辨率并保持纵横比,请使用函数 imutils (查看文档)。是这样的:

 img = cv2.imread(file , 0)
img = imutils.resize(img, width=1280)
cv2.imshow('image' , img)

希望有所帮助,祝你好运!

原文由 Andres Mitre 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题