OpenCV教程-OpenCV调整图像大小
有时,转换加载的图像是必要的。在图像处理中,我们需要调整图像的大小以执行特定操作。图像通常存储在Numpy ndarray(数组)中。使用 ndarray.shape 可以获取图像的维度。我们可以通过使用维度变量的索引位置获取每个像素的宽度、高度和通道数。
示例:1
import cv2
img = cv2.imread(r'C:\Users\DEVANSH SHARMA\cat.jpeg', 1)
scale = 60
width = int(img.shape[1] * scale / 100)
height = int(img.shape[0] * scale / 100)
dim = (width, height)
# resize image
resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)
print('Resized Dimensions : ', resized.shape)
cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
Resized Dimensions : (199, 300, 3)
调整图像的大小意味着更改图像的维度,即其宽度或高度以及两者。调整图像大小也可以保留原始图像的纵横比。OpenCV提供 cv2.resize() 函数来调整图像的大小。其语法如下:
cv2.resize(src, dsize[, dst[, fx[,fy[,interpolation]]])
参数:
- src - 输入图像(必需)。
- dsize - 输出图像的期望大小(必需)。
- fx - 沿水平轴的比例因子(可选)。
- fy - 沿垂直轴的比例因子。
插值(可选)-此标志使用以下方法:
- INTER_NEAREST - 最近邻插值 INTER_AREA - 使用像素面积关系重新采样。当我们尝试进行图像缩放时,它类似于INTER_NEAREST方法。
- INTER_CUBIC - 在4×4像素邻域上的双三次插值。
- INTER_LANCOZS4 - 在8×8像素邻域上的Lanczos插值。
调整图像大小的示例
有多种方法可以调整图像的大小。以下是执行调整操作的一些示例:
1.保留纵横比(保持图像的高宽比)
- 缩小(减小图像的大小)
- 放大(增加图像的大小)
2.不保留纵横比
- 仅调整宽度
- 仅调整高度
3.调整指定的宽度和高度
保留纵横比
- 使用 resize() 进行缩小
import cv2
img = cv2.imread(r'C:\Users\DEVANSH SHARMA\cat.jpeg', 1)
print('Original Dimensions : ', img.shape)
scale = 60 # percent of original size
width = int(img.shape[1] * scale / 100)
height = int(img.shape[0] * scale / 100)
dim = (width, height)
# resize image
resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)
print('Resized Dimensions : ', resized.shape)
cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
Original Dimensions : (332, 500, 3)
Resized Dimensions : (199, 300, 3)
在上面的示例中,scale_per
变量保存了需要缩放的图像百分比。使用此值与原始图像的维度一起,计算输出图像的宽度和高度。
- 使用 resize() 进行放大
import cv2
img = cv2.imread(r'C:\Users\DEVANSH SHARMA\cat.jpeg', 1)
print('Original Dimensions : ', img.shape)
scale = 150 # percent of original size
width = int(img.shape[1] * scale / 100)
height = int(img.shape[0] * scale / 100)
dim = (width, height)
# resize image
resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)
print('Resized Dimensions : ', resized.shape)
cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
Original Dimensions : (332, 500, 3)
Resized Dimensions : (398, 600, 3)
不保留纵横比
- 仅调整宽度
在下面的示例中,我们为宽度提供了特定的像素值,高度将保持不变。
import cv2
img = cv2.imread(r'C:\Users\DEVANSH SHARMA\cat.jpeg', cv2.IMREAD_UNCHANGED)
print('Original Dimensions : ', img.shape)
width = img.shape[1] # keep original width
height = 440
dim = (width, height)
# resize image
resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)
print('Resized Dimensions : ', resized.shape)
cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
Original Dimensions : (332, 500, 3)
Resized Dimensions : (440, 500, 3)
- 仅调整高度
在下面的示例中,scale_per
变量保存了需要缩放高度的百分比,或者我们可以为高度提供特定的像素值。
import cv2
img = cv2.imread(r'C:\Users\DEVANSH SHARMA\cat.jpeg', 1)
print('Original Dimensions : ', img.shape)
width = img.shape[1] # keep original width
height = 200
dim = (width, height)
# resize image
resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)
print('Resized Dimensions : ', resized.shape)
cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出:
Original Dimensions : (332, 500, 3)
Resized Dimensions : (200, 500, 3)
- 调整指定的宽度和高度
我们可以指定宽度和高度。
import cv2
img = cv2.imread(r'C:\Users\DEVANSH SHARMA\cat.jpeg', 1)
print('Original Dimensions : ', img.shape)
width = 350
height = 450
dim = (width, height)
# resize image
resized = cv2.resize(img, dim, interpolation=cv2.INTER_AREA)
print('Resized Dimensions : ', resized.shape)
cv2.imshow("Resized image", resized)
cv2.waitKey(0)
cv2.destroyAllWindows()
输出: