📜  python cv2 resize keep aspect ratio - Python (1)

📅  最后修改于: 2023-12-03 15:18:54.560000             🧑  作者: Mango

Python CV2 Resize图片保持长宽比介绍

在使用Python中的OpenCV库进行图像处理时,我们经常需要将一张图片进行缩放。但是,缩放后的图片如果长宽比例不同,会导致图像变形的问题。在本文中,我们将介绍如何使用OpenCV库来保持图片的长宽比例。

问题介绍

使用OpenCV库中的cv2.resize()方法可以很方便地对图片进行缩放。该方法的语法为:

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])

其中参数src表示输入图片,dsize表示输出图片的大小,fxfy是缩放比例。但是,这种缩放方式会导致长宽比例的变化。

例如,我们先读取一张图片,然后将它缩放为200×200的大小:

import cv2

img = cv2.imread('image.jpg')
resized_img = cv2.resize(img, (200, 200))
cv2.imshow('Resized Image', resized_img)
cv2.waitKey(0)

执行上面这段代码后,我们可以看到缩放后的图片:

Resized Image

缩放后的图片已经变形了,这是因为长宽比例发生了变化。为了解决这个问题,我们需要想办法保持图片的长宽比例。

保持长宽比例

为了保持图片的长宽比例,我们需要在缩放图片的时候,同时指定新的宽度或高度,而不是新的宽度和高度。具体来说,我们可以选择指定宽度或高度的大小,然后计算出另一个维度应该具有的大小,以此来完成缩放。假设我们想要将图片缩放为200×200 的大小,但同时要保持它的长宽比例,我们可以使用以下代码:

import cv2

img = cv2.imread('image.jpg')
height, width, _ = img.shape
if height > width:
    ratio = height / 200
    dim = (int(width / ratio), 200)
else:
    ratio = width / 200
    dim = (200, int(height / ratio))
resized_img = cv2.resize(img, dim)
cv2.imshow('Resized Image', resized_img)
cv2.waitKey(0)

上述代码中,首先读取原始图片的大小。如果原始图片的高度大于宽度,则以高度为基准进行缩放,并计算出缩放后的宽度;否则以宽度为基准进行缩放,并计算出缩放后的高度。最终,我们使用OpenCV中的cv2.resize()方法对图片进行缩放,并显示缩放后的图片。

执行上述代码后,我们可以看到缩放后的图片,它的长宽比例得以保持:

Resized Image with aspect ratio

到这里,我们就成功地保持了图片的长宽比例。

总结

保持图片长宽比例是在进行图片缩放时经常需要解决的问题,本文中我们介绍了如何使用OpenCV库来完成这个任务。具体来说,我们通过比较长和宽的比例,计算出维度的大小,并指定另一个维度的大小来保持图片的长宽比例。