cv2DRotationMatrix的旋转变换矩阵

Mat getRotationMatrix2D(Point2f center, double angle, double scale)

CvMat* cv2DRotationMatrix(CvPoint2D32f center, double angle, double scale, CvMat* map_matrix)

的解释中说,其实是用到了下面的矩阵:

The function calculates the following matrix:

\begin{bmatrix} \alpha &  \beta & (1- \alpha )  \cdot \texttt{center.x} -  \beta \cdot \texttt{center.y} \\ - \beta &  \alpha &  \beta \cdot \texttt{center.x} + (1- \alpha )  \cdot \texttt{center.y} \end{bmatrix}

where

\begin{array}{l} \alpha =  \texttt{scale} \cdot \cos \texttt{angle} , \\ \beta =  \texttt{scale} \cdot \sin \texttt{angle} \end{array}

α β好理解,那X,Y平移部分的(1-α)*center.x - β*center.y 和β*center.x + (1-α)*center.y是怎么来的呢?

其实就是先通过一次平移变换转换原坐标系统到以参考点为原点的坐标系统,在新得到的坐标系统中通过旋转变换得到点的坐标,然后再经过一次恢复平移的变换来把当前新系统中的坐标转换到旧系统中的坐标,公式如下:

|1 0 tx|   |α β 0 |   |1 0 -tx|
|0 1 ty| *|-β α 0| * |0 1 -ty|
|0 0 1|    |0 0 1|      |0 0  1 |

这三个矩阵的乘积就是\begin{bmatrix} \alpha &  \beta & (1- \alpha )  \cdot \texttt{center.x} -  \beta \cdot \texttt{center.y} \\ - \beta &  \alpha &  \beta \cdot \texttt{center.x} + (1- \alpha )  \cdot \texttt{center.y} \end{bmatrix}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值