【OpenCV】05.改变图片大小

Posted on Sep 12, 2022

在处理图片的过程中我们需要对图片大小进行调整,以进行更精确的操作。图片通常储存在 Numpy ndarray(array)。ndarray.shape 储存了图片的空间信息。我们可以获得图片的宽度高度以及通道数。

示例一:

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-resize-images

改变图片大小就是改变图片的空间信息。图片的朝向也能够通过 cv2.resize() 更改。

cv2.resize(src, dsize[, dst[, fx[,fy[,interpolation]]])  

参数

src 源图片(必须)。

dsize 输出图片大小(必须)。

fx 水平方向比例因子(可选)。

fy 垂直方向比例因子(可选)。

Interpolation(optional) 插值算法。

  • INTER_NEAREST 最近邻插值。插入最近的值。
  • INTER_AREA 使用像素面积重采样。
  • INTER_CUBIC 使用临近的 4x4 的面积重采样
  • INTER_LANCOZS4 使用临近的 8x8 面积重采样。

举例改变图片大小

有以下几种方式改变图片大小:

1.保持图片比例。

  • Downscale 缩小尺寸。
  • Upscale 放大尺寸。

2.不保持图片比例

  • 只改变宽度。
  • 只改变高度。

3.指定宽度高度改变大小。

Downscale with 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)

example-of-resizing-images

在后续教程中, scale_per 保存有图片的缩放比例。该值 <100 缩小图片。

Upscale with 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)

example-of-resizing-images2

不保持图片比例

改变图片宽度

下面例子中仅改变图片宽度,高度信息将不受影响。

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)

example-of-resizing-images3

改变图片高度

在后续教程中,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)

example-of-resizing-images4

指定宽度高度改变大小

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()  

输出:

example-of-resizing-images5