OpenCV Python - 调整图像大小和旋转图像

在本章中,我们将学习如何借助 OpenCV Python 调整图像大小和旋转图像。


调整图像大小

可以使用 cv2.resize() 函数放大或缩小图像。

resize()函数使用如下 −

resize(src, dsize, dst, fx, fy, interpolation)

一般来说,interpolation(插值)是在已知数据点之间估计值的过程。

当图形数据包含间隙时,但间隙的任一侧或间隙内的几个特定点都有数据可用。 插值使我们能够估计间隙内的值。

在上面的 resize() 函数中,interpolation(插值)标志确定用于计算目标图像大小的插值类型。

插值类型

插值类型如下 −

  • INTER_NEAREST − 最近邻插值法。

  • INTER_LINEAR − 双线性插值(默认使用)

  • INTER_AREA − 使用像素面积关系重采样。 它是图像抽取的首选方法,但当图像被缩放时,它类似于 INTER_NEAREST 方法。

  • INTER_CUBIC − 4x4 像素邻域的 bicubic 插值

  • INTER_LANCZOS4 − 8x8 像素邻域上的 Lanczos 插值

首选的插值方法是用于缩小的 cv2.INTER_AREA 和用于缩放的 cv2.INTER_CUBIC (slow) & cv2.INTER_LINEAR。

示例

以下代码将"messi.jpg"图像的大小调整为原始高度和宽度的一半。

import numpy as np
import cv2
img = cv2.imread('messi.JPG',1)
height, width = img.shape[:2]
res = cv2.resize(img,(int(width/2), int(height/2)), interpolation =
cv2.INTER_AREA)

cv2.imshow('image',res)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出

Resize an Image

旋转图片

OpenCV 使用仿射变换函数对图像进行平移和旋转等操作。 仿射变换是一种可以表示为矩阵乘法(线性变换)后跟向量加法(平移)形式的变换。

cv2模块提供了cv2.warpAffinecv2.warpPerspective两个函数,可以进行各种变换。 cv2.warpAffine 采用 2x3 变换矩阵,而 cv2.warpPerspective 采用 3x3 变换矩阵作为输入。

为了找到这个旋转变换矩阵,OpenCV提供了一个函数cv2.getRotationMatrix2D,如下 −

getRotationMatrix2D(center, angle, scale)

然后我们将 warpAffine 函数应用于 getRotationMatrix2D() 函数返回的矩阵以获得旋转图像。

以下程序将原始图像旋转 90 度而不改变尺寸 −

示例

import numpy as np
import cv2
img = cv2.imread('OpenCV_Logo.png',1)
h, w = img.shape[:2]

center = (w / 2, h / 2)
mat = cv2.getRotationMatrix2D(center, 90, 1)
rotimg = cv2.warpAffine(img, mat, (h, w))
cv2.imshow('original',img)
cv2.imshow('rotated', rotimg)
cv2.waitKey(0)
cv2.destroyAllWindows()

输出

Original Image

原始图像

Rotated Image

旋转图像