5分钟更新你的图像处理小技巧(1)opencv旋转矩阵的不同之处

发布时间:2024年01月03日

力求5分钟直接了当的说明一个实际问题

cv2.getRotationMatrix2D 简介

用于生成图像旋转的仿射变换矩阵
参数包括:
	center: 旋转的中心点,通常是图像的中心。
	angle: 旋转角度,以度为单位。正值表示逆时针旋转。
	scale: 缩放比例,表示在旋转时图像的缩放程度。
函数返回一个2x3的仿射变换矩阵,与cv2.warpaffine 连用较多

opencv中给出的仿射变换矩阵

[ α β ( 1 ? α ) ? center.x ? β ? center.y ? β α β ? center.x + ( 1 ? α ) ? center.y ] α = scale ? cos ? ( angle ) , β = scale ? sin ? ( angle ) \begin{bmatrix} \alpha & \beta & (1 - \alpha) \cdot \text{center.x} - \beta \cdot \text{center.y} \\ -\beta & \alpha & \beta \cdot \text{center.x} + (1 - \alpha) \cdot \text{center.y} \end{bmatrix}\\ \alpha = \text{scale} \cdot \cos(\text{angle}),\quad\beta = \text{scale} \cdot\sin(\text{angle}) [α?β?βα?(1?α)?center.x?β?center.yβ?center.x+(1?α)?center.y?]α=scale?cos(angle),β=scale?sin(angle)

这与旋转矩阵有何不同?

在中学时,我们学到向量(x,y)以原点为中心旋转一个角度angle,则它的新坐标是:

( x ′ y ′ ) = ( cos ? ( a n g l e ) ? sin ? ( a n g l e ) sin ? ( a n g l e ) cos ? ( a n g l e ) ) ( x y ) \begin{pmatrix} x' \\y'\end{pmatrix} =\begin{pmatrix} \cos(angle) & -\sin(angle) \\ \sin(angle) & \cos(angle) \end{pmatrix} \begin{pmatrix} x \\ y \end{pmatrix} (xy?)=(cos(angle)sin(angle)??sin(angle)cos(angle)?)(xy?)

可以看到旋转矩阵的正负号与仿射变换不同

真相就是!

opencv中仿射变换矩阵按照 图像坐标系,即左上角为原点(0,0)
而中学所熟悉的公式是按照 自然坐标系,即左下角为原点(0,0),也就是笛卡尔坐标系

图像处理中,初学者很容忽视这个问题,导致实操时卡bug

如果你还有时间,可以浏览 opencv官方文档

文章来源:https://blog.csdn.net/Emily_Buffy/article/details/135374473
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。