返回

图像缩放:使用 OpenCV 的 cv2.resize()

人工智能

图像缩放是图像处理中最基本的操作之一。在计算机视觉领域,我们需要对图像进行缩放以适应不同的场景和需求。例如,当我们需要将图像缩小或放大以适应屏幕或内存限制时;当我们需要对图像进行边缘检测或特征提取时;当我们需要将图像作为输入数据输入到机器学习模型中时等等。

在 OpenCV 中,图像缩放可以轻松地使用 cv2.resize() 函数完成。该函数使用最近邻插值作为默认插值方法,但它还提供了双线性插值、双三次插值和区域插值等其他插值方法。

cv2.resize() 的参数

参数 类型
src 输入图像 输入图像必须是 NumPy 数组,其数据类型可以是 uint8int8uint16int16float32float64
dst 输出图像 输出图像的尺寸由 new_size 参数决定,其数据类型与输入图像相同。
dsize 新图像的尺寸 一个元组 (width, height) 或一个整数。如果指定一个整数,则图像将被等比例缩放。
fx, fy 水平和垂直缩放因子 浮点数,指定图像在水平和垂直方向上的缩放因子。
interpolation 插值方法 以下插值方法之一:
- cv2.INTER_NEAREST:最近邻插值
- cv2.INTER_LINEAR:双线性插值
- cv2.INTER_AREA:区域插值
- cv2.INTER_CUBIC:双三次插值
- cv2.INTER_LANCZOS4:Lanczos4 插值

使用不同插值方法的示例代码

以下示例代码展示了如何使用不同插值方法将图像缩小到一半。

import cv2

# 读取输入图像
img = cv2.imread("lena.jpg")

# 使用最近邻插值将图像缩小到一半
dst1 = cv2.resize(img, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_NEAREST)

# 使用双线性插值将图像缩小到一半
dst2 = cv2.resize(img, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_LINEAR)

# 使用双三次插值将图像缩小到一半
dst3 = cv2.resize(img, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_CUBIC)

# 使用区域插值将图像缩小到一半
dst4 = cv2.resize(img, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)

# 使用 Lanczos4 插值将图像缩小到一半
dst5 = cv2.resize(img, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_LANCZOS4)

# 显示结果
cv2.imshow("Original Image", img)
cv2.imshow("Nearest Neighbor Interpolation", dst1)
cv2.imshow("Bilinear Interpolation", dst2)
cv2.imshow("Bicubic Interpolation", dst3)
cv2.imshow("Area Interpolation", dst4)
cv2.imshow("Lanczos4 Interpolation", dst5)
cv2.waitKey(0)
cv2.destroyAllWindows()

从结果图中可以看出,双三次插值和 Lanczos4 插值可以产生最好的效果。

总结

cv2.resize() 是 OpenCV 中一个非常重要的函数,它可以轻松地完成图像缩放操作。通过使用不同的插值方法,我们可以获得不同的缩放效果。希望本文能帮助您更好地理解 cv2.resize() 函数的用法。