如何对代表图像的NumPy数组进行重采样

  • Post category:Python

重采样是调整图像大小的常用方法,常常用于图像缩放、旋转、平移等操作,本文将详细讲解如何对代表图像的NumPy数组进行重采样操作。

1.导入所需库

在进行重采样之前,需要导入NumPy和OpenCV库

import numpy as np
import cv2

2.读取图像

可以使用OpenCV中的imread函数读取图像,并将其转换为NumPy数组

img = cv2.imread('test.jpg')

3.图像重采样

OpenCV提供了resize函数用于图像重采样操作。其中src参数表示输入图像,dsize参数是指定输出图像大小,interpolation参数则是指定插值方法。

resized_img = cv2.resize(img, (400, 400), interpolation=cv2.INTER_AREA)

上述代码将输入图像img重采样为大小为400×400的图像 resized_img

除了cv2.INTER_AREA之外,OpenCV还提供了其他几种插值方法:

  • cv2.INTER_NEAREST:最近邻插值法,速度最快,但重采样后的图像质量较差
  • cv2.INTER_LINEAR:线性插值法,速度较快,但可能会在图像中引入伪影或失真
  • cv2.INTER_CUBIC:3次样条插值法,速度较慢,但可以得到更平滑的图像,并能够保留更多细节信息
  • cv2.INTER_LANCZOS4:Lanczos插值法,速度最慢,但可以得到更高质量的图像

这里给出两个示例:

示例一:将图像缩小一半

resized_img = cv2.resize(img, (0, 0), fx=0.5, fy=0.5, interpolation=cv2.INTER_AREA)
  • fx=0.5fy=0.5表示在水平和垂直方向上都缩小一半,即将原图像尺寸的宽和高分别除以2

示例二:将图像放大2倍

resized_img = cv2.resize(img, (0, 0), fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
  • fx=2fy=2表示在水平和垂直方向上都扩大2倍,即将原图像尺寸的宽和高分别乘以2

  • interpolation=cv2.INTER_CUBIC 表示采用3次样条插值法进行重采样,以保留更多细节信息。

4.保存图像

使用OpenCV中的imwrite函数将重采样后的图像保存为文件。

cv2.imwrite('resized_test.jpg', resized_img)

上述代码将重采样后的图像resized_img保存为resized_test.jpg文件。

完整代码示例:

import numpy as np
import cv2

img = cv2.imread('test.jpg')

resized_img = cv2.resize(img, (400, 400), interpolation=cv2.INTER_AREA)
cv2.imwrite('resized_test.jpg', resized_img)

上述代码将读取名为test.jpg的图像,将其大小调整为400×400,然后保存为resized_test.jpg文件。