OpenCV:python图像旋转,cv2.getRotationMatrix2D 和 cv2.warpAffine 函数

前言

仅供个人学习用,如果对各位朋友有参考价值,给个赞或者收藏吧 ^_^

一. cv2.getRotationMatrix2D(center, angle, scale)

1.1 参数说明

|----------------|--------------------------------------------------------------------------------------------|
| parameters | center:旋转中心坐标,是一个元组参数(col, row) angle:旋转角度,旋转方向,负号为逆时针,正号为顺时针 scale:旋转后图像相比原来的缩放比例,1为等比例缩放 |
| returns | 返回一个2*3的旋转(变换)矩阵,因为变换矩阵第三行形式固定,所以忽略。 |

returns:返回下面的2*3行列式,注:α=cosθ,β=sinθ

还是不太懂的话参考:cv2.getRotationMatrix2D的旋转矩阵的正确形式-CSDN博客

二、cv2.warpAffine(src, M, dsize, dst, flags, borderMode, borderValue)

2.1 参数说明

|----------------|-------------------------------------------------------------------------------------------------------------------------------------------------------------|
| parameters | src:原始图像。 dst:输出图像。 M:变换矩阵,这里是由getRotationMatrix2D生成的旋转矩阵。 dsize:输出图像的大小。 flags:插值方法,通常使用INTER_LINEAR(线性插值)。 borderMode:边界像素模式。 borderValue:边界填充值,用于边界外的像素。 |
| returns | 返回旋转后的图像 |

2.2 flags 值说明

三、举例

3.1 demo

python 复制代码
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

img = cv.imread('E:/Desktop/jianli/lenna.png')
img = cv.cvtColor(img, cv.COLOR_BGR2RGB)
(h, w) = img.shape[:2]
print('原图像的高和宽', h, w)
(cX, cY) = (w // 2, h // 2)
M = cv.getRotationMatrix2D((cX, cY), -45, 1.0)
print('旋转矩阵:\n', M)
rotate0 = cv.warpAffine(src=img, M=M, dsize=(h, w))
cos = np.abs(M[0, 0])
sin = np.abs(M[0, 1])
nH = int((h*cos) + (w*sin))
nW = int((h*sin) + (w*cos))
print('新图像的高和宽', nH, nW)
rotate1 = cv.warpAffine(img, M, (nW, nH))
# 调整旋转矩阵的中心以平移到中心显示全图
M[0, 2] += (nW/2) - cX
M[1, 2] += (nH/2) - cY
rotate2 = cv.warpAffine(img, M, (nW, nH))
print('中心点平移后的旋转矩阵:\n', M)
# 显示图像
plt.subplot(1, 3, 1), plt.imshow(rotate0, 'gray'), plt.title('rotate0')
plt.subplot(1, 3, 2), plt.imshow(rotate1, 'gray'), plt.title('rotate1')
plt.subplot(1, 3, 3), plt.imshow(rotate2, 'gray'), plt.title('rotate2')
plt.show()

3.1.1 新图像的高和宽计算

计算经过仿射变换或旋转后新图像的宽度和高度,尤其是在旋转图像时保持图像的完整性而不裁剪任何部分,需要一些几何计算。

看了以下图就能知道为啥子这么计算啦

nH = int((h*cos) + (w*sin))

nW = int((h*sin) + (w*cos))

3.2 output

相关推荐
MobotStone5 分钟前
AI 玩不好?别怪工具,是你给它定的规矩有问题!
人工智能
AI日报派送佬5 小时前
2026年10月14日AI行业日报|Gemini 4 Argon正式发布;小模型跨设备传播风险引发安全热议
网络·人工智能·openai·谷歌·deepseek·anthropic·ai日报
VidDown5 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
镜象科技6 小时前
职业院校AI心理健康解决方案怎么选?三个特殊场景与三类路线
人工智能
Leo.yuan6 小时前
企业Data Agent架构选型:帆软Dora基于NL2BI的现有BI体系复用方案
大数据·人工智能
朱涛的自习室6 小时前
70 美金的 Beyond Compare,我让 Gemini 4 和 DeepSeek 造个开源免费版(Day 2)
android·前端·人工智能
米小虾6 小时前
上下文:Agent 的眼睛里到底装着什么
人工智能·agent
米小虾6 小时前
Agent = 大脑 + 眼睛 + 手脚:一篇看懂现代 AI Agent 的骨架
人工智能
小小测试开发7 小时前
安全评测得分 0.9556 掉到 0.3257,只改了 top_k 和 prompt_style 之外的题面比例
人工智能·安全·prompt
slacker-kian7 小时前
[实践]-用LLM对文本结构化:把多段文本描述变成规范的 JSON 知识库
人工智能·llm·prompt·结构化·pydantic·one-shot 提示