📜  Python Opencv 基础3 : resize 调整图像大小

📅  最后修改于: 2020-08-28 00:57:45             🧑  作者: Mango

在上几章节中,我们学习了opencv的一些读取、保存等操作。

从此章节开始,我们将学习利用openc进行一些简单的图像操作。

要在Python中调整图片大小,可以使用OpenCV库cv2的cv2.resize()函数。

默认情况下,调整大小仅会更改图像的宽度和高度。根据需要可以保留或不保留长宽比。可以通过分别为给定目标高度或宽度计算宽度或高度来保留纵横比。

揭幕cv2 resize()函数的语法

cv2.resize(src, dsize[, dst[, fx[, fy[, interpolation]]]])
  • src 是numpy数组形式的源图像,原始图像或输入图像
  • dsize 是输出图像的所需大小,以元组形式给出
  • fx 是沿X轴或水平轴的缩放比例
  • fy 是沿Y轴或垂直轴的比例因子
  • interpolation 可以是以下值之一。
    • INTER_NEAREST
    • INTER_LINEAR
    • INTER_AREA
    • INTER_CUBIC
    • INTER_LANCZOS4

基于选择的插值技术,使用相应的算法。您可以将插值视为一种方法,该方法根据相邻像素和调整图像大小的比例来确定哪个像素获得哪个值。

如何调整图像大小?

您可以通过三种方式调整图像的大小。

  1. 保留纵横比,并增加或减少图像的宽度和高度。为了清楚起见,纵横比是图像宽度与图像高度的比率。
  2. 仅沿X轴或水平轴缩放图像。意思是,改变宽度,保持高度与原始图像相同。
  3. 仅沿Y轴或垂直轴缩放图像。意思是,改变高度,保持宽度与原始图像相同。

示例1:调整图片大小– cv2.resize()

在下面的示例中,我们将看到如何在保留宽高比的同时使用来调整上述图像的大小。我们将图像的大小调整为其实际形状的50%,即将其高度减小为其原始形状的50%,将宽度减小为其原始形状的50%。

import cv2
 
src = cv2.imread('./cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)

#percent by which the image is resized
scale_percent = 50

#calculate the 50 percent of original dimensions
width = int(src.shape[1] * scale_percent / 100)
height = int(src.shape[0] * scale_percent / 100)

# dsize
dsize = (width, height)

# resize image
output = cv2.resize(src, dsize)

cv2.imwrite('D:/cv2-resize-image-50.png',output)

在上面的Python程序中我们做了什么?

  1. cv2.imread()使用透明通道(如果有)读取给定文件,并返回一个具有像素值的numpy数组。cv2.IMREAD_UNCHANGED
  2. scale_percent 设置为50。我们将图像缩放到其原始尺寸(宽度和高度)的50%。
  3. src.shape [1]给出源图像的宽度。计算原始宽度的50%。同样,也可以计算高度。int(src.shape[1] * scale_percent / 100)
  4. 然后,我们dsize使用新计算的width和设置所需的大小height
  5. cv2.resize将图像调整为该src大小dsize并返回numpy数组。
  6. 使用,我们将的输出写入本地图像文件。cv2.imwritecv2.resize

示例2:cv2水平调整图像大小

我们将仅沿x轴或水平轴缩放图像。并且我们保持图像的高度不变。

在dsize中,我们将保持与原始图像相同的高度,但会更改宽度。

import cv2
 
src = cv2.imread('./cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)

# set a new width in pixels
new_width = 300

# dsize
dsize = (new_width, src.shape[0])

# resize image
output = cv2.resize(src, dsize, interpolation = cv2.INTER_AREA)

cv2.imwrite('D:/cv2-resize-image-width.png',output) 

cv2垂直调整图像大小

我们将仅沿y轴或“垂直”轴缩放图像。输出图像的宽度与源图像的宽度保持不变。

在dsize中,我们将保持与原始图像相同的宽度,但会更改高度。

import cv2
 
src = cv2.imread('./cv2-resize-image-original.png', cv2.IMREAD_UNCHANGED)

# set a new height in pixels
new_height = 200

# dsize
dsize = (src.shape[1], new_height)

# resize image
output = cv2.resize(src, dsize, interpolation = cv2.INTER_AREA)

cv2.imwrite('D:/cv2-resize-image-height.png',output) 

——->>>>>本章节结束