- OpenCV Python 教程
- OpenCV Python - 首页
- OpenCV Python - 概述
- OpenCV Python - 环境配置
- OpenCV Python - 读取图像
- OpenCV Python - 写入图像
- OpenCV Python - 使用 Matplotlib
- OpenCV Python - 图像属性
- OpenCV Python - 位运算
- OpenCV Python - 形状和文本
- OpenCV Python - 鼠标事件
- OpenCV Python - 添加轨迹条
- OpenCV Python - 缩放和旋转
- OpenCV Python - 图像阈值
- OpenCV Python - 图像滤波
- OpenCV Python - 边缘检测
- OpenCV Python - 直方图
- OpenCV Python - 颜色空间
- OpenCV Python - 图像变换
- OpenCV Python - 图像轮廓
- OpenCV Python - 模板匹配
- OpenCV Python - 图像金字塔
- OpenCV Python - 图像加法
- OpenCV Python - 图像融合
- OpenCV Python - 傅里叶变换
- OpenCV Python - 捕捉视频
- OpenCV Python - 播放视频
- OpenCV Python - 从视频中提取图像
- OpenCV Python - 从图像生成视频
- OpenCV Python - 人脸检测
- OpenCV Python - 均值漂移/CamShift
- OpenCV Python - 特征检测
- OpenCV Python - 特征匹配
- OpenCV Python - 数字识别
- OpenCV Python 资源
- OpenCV Python - 快速指南
- OpenCV Python - 资源
- OpenCV Python - 讨论
OpenCV Python - 图像缩放和旋转
在本章中,我们将学习如何使用 OpenCV Python 缩放和旋转图像。
图像缩放
可以使用 `cv2.resize()` 函数来放大或缩小图像。
resize() 函数使用方法如下:
resize(src, dsize, dst, fx, fy, interpolation)
一般来说,插值是估计已知数据点之间值的 process。
当图形数据包含间隙,但在间隙的两侧或间隙内的几个特定点上有可用数据时,插值允许我们估计间隙内的值。
在上面的 `resize()` 函数中,插值标志决定了用于计算目标图像大小的插值类型。
插值类型
插值类型如下:
INTER_NEAREST - 最近邻插值。
INTER_LINEAR - 双线性插值(默认使用)
INTER_AREA - 使用像素面积关系进行重采样。它是图像缩小的首选方法,但是当图像放大时,它类似于 INTER_NEAREST 方法。
INTER_CUBIC - 在 4x4 像素邻域上进行双三次插值
INTER_LANCZOS4 - 在 8x8 像素邻域上进行 Lanczos 插值
建议缩小图像时使用 `cv2.INTER_AREA` 插值,放大图像时使用 `cv2.INTER_CUBIC`(较慢)和 `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()
输出
旋转图像
OpenCV 使用仿射变换函数进行图像平移和旋转等操作。仿射变换是一种可以表示为矩阵乘法(线性变换)后跟向量加法(平移)形式的变换。
cv2 模块提供两个函数 cv2.warpAffine 和 cv2.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()
输出
原始图像
旋转后的图像