Opencv Python 简明教程
OpenCV Python - Resize and Rotate an Image
在本章中,我们将了解如何使用 OpenCVPython 调整图像大小和旋转图像。
Resize an Image
可以使用 cv2.resize() 函数放大或缩小图像。
resize() 函数的使用方式如下:
resize(src, dsize, dst, fx, fy, interpolation)
一般来说,插值是在已知数据点之间估计算值的处理过程。
当图形数据包含一个间隙,但在间隙的两侧或间隙内的几个特定点内有数据可用时,插值允许我们估算间隙内的值。
在上 resize() 函数中,插值标记确定用于计算目标图像大小的插值类型。
Types of Interpolation
插值类型如下:
-
INTER_NEAREST − 最近邻插值。
-
INTER_LINEAR − 双线性插值(默认使用)
-
INTER_AREA − 使用像素区域关系进行重采样。它是图像抽稀的首选方法,但当图像缩放时,它类似于 INTER_NEAREST 方法。
-
INTER_CUBIC − 在 4x4 像素邻域上执行双三次插值
-
INTER_LANCZOS4 − 在 8x8 像素邻域上执行 Lanczos 插值
首选插值方法是 cv2.INTER_AREA 用于缩小,cv2.INTER_CUBIC(慢)和 cv2.INTER_LINEAR 用于缩放。
Rotate an image
OpenCV 使用仿射变换函数对图像进行诸如平移和旋转之类的操作。仿射变换是一种变换,可以表示为矩阵乘法(线性变换)后跟向量加法(平移)。
cv2 模块提供两个函数 cv2.warpAffine 和 cv2.warpPerspective ,您可以使用它们执行各种变换。cv2.warpAffine 采用 2x3 变换矩阵,而 cv2.warpPerspective 采用 3x3 变换矩阵作为输入。
为了找到用于旋转的变换矩阵,OpenCV 提供了一个函数 cv2.getRotationMatrix2D ,如下所示:
getRotationMatrix2D(center, angle, scale)
然后我们将 warpAffine 函数应用于 getRotationMatrix2D()函数返回的矩阵,以获得旋转后的图像。
以下程序将原始图像旋转 90 度,而不改变其尺寸:
Example
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()