图片的缩放包含了两层意思:缩小和放大。那么OpenCV提供了resize函数:
def resize(src: UMat, dsize: cv2.typing.Size | None, dst: UMat | None = ..., fx: float = ..., fy: float = ..., interpolation: int = ...) -> UMat: ...
参数说明:
参数 | 描述 |
---|---|
src | 【必需】原图像 |
dsize | 【必需】输出图像所需大小 |
fx | 【可选】沿水平轴的比例因子 |
fy | 【可选】沿垂直轴的比例因子 |
interpolation | 【可选】插值方式 |
其中插值方式有很多种:
cv.INTER_NEAREST | 最近邻插值 |
cv.INTER_LINEAR | 双线性插值 |
cv.INTER_CUBIC | 双线性插值 |
cv.INTER_AREA | 使用像素区域关系重新采样。它可能是图像抽取的首选方法,因为它可以提供无莫尔条纹的结果。但是当图像被缩放时,它类似于INTER_NEAREST方法。 |
通常的,缩小使用cv.INTER_AREA,放缩使用cv.INTER_CUBIC(较慢)和cv.INTER_LINEAR(较快效果也不错)。默认情况下,所有的放缩都使用cv.INTER_LINEAR。
一、指定尺寸进行缩放
指定dsize参数
import cv2
img1 = cv2.imread("./1-1.jpg", cv2.IMREAD_UNCHANGED)
img2 = cv2.resize(img1, (250, 250)) #缩小
img3 = cv2.resize(img1, (700, 700)) #放大
cv2.imshow("img-1", img1)
cv2.imshow("img-2", img2)
cv2.imshow("img-3", img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
二、宽高等比缩放
dsize参数需要设成None,再设置fx和fy
import cv2
img1 = cv2.imread("./1-1.jpg", cv2.IMREAD_UNCHANGED)
img2 = cv2.resize(img1, None, fx=0.5, fy=0.5) # 缩小0.5倍
img3 = cv2.resize(img1, None, fx=1.5, fy=1.5) # 放大1.5倍
cv2.imshow("img-1", img1)
cv2.imshow("img-2", img2)
cv2.imshow("img-3", img3)
cv2.waitKey(0)
cv2.destroyAllWindows()
要进行图片缩放,要么设置dsize参数,要么设置fx和fy参数,但是设置fx和fy参数时需要将dsize设置成None.