重采样是调整图像大小的常用方法,常常用于图像缩放、旋转、平移等操作,本文将详细讲解如何对代表图像的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.5
和fy=0.5
表示在水平和垂直方向上都缩小一半,即将原图像尺寸的宽和高分别除以2
示例二:将图像放大2倍
resized_img = cv2.resize(img, (0, 0), fx=2, fy=2, interpolation=cv2.INTER_CUBIC)
-
fx=2
和fy=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
文件。