如何用OpenCV在Python中缩放和调整图像大小

1,214 阅读4分钟

简介

在本教程中,我们将解释如何通过使用OpenCV函数cv2.resize()在Python中缩放和调整图像大小。我们将首先介绍cv2.resize()的语法并理解它的各种参数和选项。然后我们将看到使用这个函数调整图像大小的各种例子。

使用OpenCV调整图像大小:cv2.resize()

语法

cv2.resize(src, dsize, fx, fy, interpolation)

  • src -这是需要调整大小的输入图像。
  • dsize -输出图像的大小,以(宽,高)的形式给出
  • fx -表示沿x轴的比例因子
  • fy -表示沿y轴的比例系数
  • interpolation -表示插值技术,默认为cv2.INTER_LINEAR

一些需要考虑的问题 cv2.调整大小()

  • 你可以使用dsize或者同时使用fx和fy来调整图像的大小。
  • dsize参数可以用来指定精确的图像尺寸。但为此,你必须事先计算出调整后的图像的宽度和高度。
  • 如果你想用一个系数来缩放图像,fx和fy是很好的选择。例如,0.5代表一半,2代表两倍,等等。

cv2.resize()的插值参数

为了调整图像的大小,cv2 resize()函数使用内插法来调整大小。这是因为当图像被放大时,它需要更多的像素来填满实际像素之间的空间。而当图像被缩小时,它需要

  • cv2.INTER_LINEAR -它使用双线性插值,最好用于将图像放大到较大的尺寸。这是cv2.resize()中的默认选项
  • cv2.INTER_NEAREST -它使用最近邻插值,速度快,但会产生块状的图像。
  • cv2.INTER_AREA -它使用像素区域插值,最好用于缩小图像的尺寸。
  • cv2.INTER_CUBIC -它在一个4 x 4像素的邻域上使用二立方插值
    。它的速度相对较慢。
  • cv2.INTER_LANCZOS4 -它在一个8 x 8像素的
    邻域上使用Lanczos插值,它产生最高的质量,但速度很慢。

Python OpenCV中cv2.resize()的例子

让我们从导入OpenCV库开始,如下图所示

在[0]中:

import cv2
import matplotlib.pyplot as plt

读取样本图像并显示

接下来,我们将为我们的例子读取一个样本图像,并显示它。我们可以看到图像的原始尺寸是800×534。

在[1]中:

#read image
img=cv2.imread("dog.jpg")

print('Image Width is',img.shape[1])
print('Image Height is',img.shape[0])
plt.imshow(cv2.cvtColor(img, cv2.COLOR_BGR2RGB))

Out[1]:

Image Width is 800
Image Height is 534

cv2.resize() Example

例子 - 1: 通过计算像素大小将图像的大小调整为一半

为了将图像的大小调整为一半,我们首先计算出新图像的宽度和高度的像素大小,然后将其传递给cv2 resize()函数。可以看出,新图像的宽度和高度是原图像的一半。

In[2]:

#Calculating the Pixel Size for Resizing
new_width = int(img.shape[1]/2)
new_height = int(img.shape[0]/2)

img_half = cv2.resize(img, (new_width, new_height))

print('Image Width is',img_half.shape[1])
print('Image Height is',img_half.shape[0])
plt.imshow(cv2.cvtColor(img_half, cv2.COLOR_BGR2RGB))

输出[2]:

Image Width is 400
Image Height is 267

cv2 resize() Example - Reduce Image to Half

例子 - 2: 将图像缩小到因子0.5(一半)

这是另一种将图像大小调整为一半的方法,将x轴和y轴的系数值传递给cv2 resize函数为0.5。在这种情况下,不需要计算新图像的像素大小。

In[3]:

img_half = cv2.resize(img, None, fx = 0.5, fy = 0.5)

print('Image Width is',img_half.shape[1])
print('Image Height is',img_half.shape[0])
plt.imshow(cv2.cvtColor(img_half, cv2.COLOR_BGR2RGB))

输出[3]:

Image Width is 400
Image Height is 267

cv2 resize() Example - Reduce Image to Half

例子 - 3: 通过计算像素大小来调整图像大小至两倍

为了使图像大小翻倍,首先要计算新图像的宽度和高度的像素大小,然后将它们传递给cv2 resize()函数。可以看出,新图像的宽度和高度是原图像的两倍。

In[4]:

#Calculating the Pixel Size for Resizing
new_width = int(img.shape[1]*2)
new_height = int(img.shape[0]*2)

img_double = cv2.resize(img, (new_width, new_height))

print('Image Width is',img_double.shape[1])
print('Image Height is',img_double.shape[0])
plt.imshow(cv2.cvtColor(img_double, cv2.COLOR_BGR2RGB))

输出[4]:

Image Width is 1600
Image Height is 1068

cv2.resize() Example - Up-Scale Image to Double

例子 - 4: 将图像放大到系数2(双倍)

这是另一种将图像放大到两倍的方法,通过将x轴和y轴的因子参数值传递给cv2 resize函数为2。这里,不需要计算新图像的像素大小。

In[5]:

img_double = cv2.resize(img, None, fx = 2, fy = 2)

print('Image Width is',img_double.shape[1])
print('Image Height is',img_double.shape[0])
plt.imshow(cv2.cvtColor(img_double, cv2.COLOR_BGR2RGB))

Out[5]:

Image Width is 1600
Image Height is 1068

cv2.resize() Example - Up-Scale Image to Double

The postHow to Scale and Resize Image in Python with OpenCV cv2.resize()appeared first onMLK - Machine Learning Knowledge.