需求
初始需求,我有一个视频,如图:
image.png
我需要把视频中的屏幕部分抠出来,并且拉伸到正常水平。这时候,我就找到了PR中的边角定位效果。参数如下:
image.png
但是这里的定位点的调整很不方便。手动调整了半天都不能调整到所需要的效果。那么我就想计算出这个参数到底应该是什么。首先我想到了坐标系转换。
首先刷一波基础知识
矩阵乘法
讲矩阵乘法的一个帖子:http://ruanyifeng.com/blog/2015/09/matrix-multiplication.html
其实矩阵乘法可以理解成为第一个矩阵的每个行矢量和第二个矩阵的每个列矢量做点积。
百度百科的定义:
矩阵相乘最重要的方法是一般矩阵乘积。它只有在第一个矩阵的列数(column)和第二个矩阵的行数(row)相同时才有意义 [1] 。一般单指矩阵乘积时,指的便是一般矩阵乘积。一个m×n的矩阵就是m×n个数排成m行n列的一个数阵。
向量加减法
向量的加法满足平行四边形法则和三角形法则。具体地,两个向量a和b相加,得到的是另一个向量。这个向量可以表示为a和b的起点重合后,以它们为邻边构成的平行四边形的一条对角线,或者表示为将a的终点和b的起点重合后,从a的起点指向b的终点的向量:
两个向量a和b的相减,则可以看成是向量a加上一个与b大小相等,方向相反的向量。又或者,a和b的相减得到的向量可以表示为a和b的起点重合后,从b的终点指向a的终点的向量
向量点积
点积在数学中,又称数量积,内积。a·b=a1b1+a2b2+……+anbn。
向量叉积
又叫向量积,外积。结果是一个向量。方向符合右手法则(C=AxB,当右手的四指从A以不超过180度的转角握向B时,竖起的大拇指指向是C的方向。),模的值为|c|=|a×b|=|a||b|sin<a,b>
叉积的长度|a×b|可以解释成这两个叉乘向量a,b共起点时,所构成平行四边形的面积
image
齐次坐标
参考:https://blog.csdn.net/janestar/article/details/44244849
线性坐标系变换
然后来看坐标系转换。
参考:
- https://blog.csdn.net/unclerunning/article/details/70893118
- https://blog.csdn.net/unclerunning/article/details/70948696
- https://zhuanlan.zhihu.com/p/23130870
- https://www.cnblogs.com/zhoug2020/p/7864898.html
4 讲述了结果,但是1更好地讲述了过程,
对于只有旋转的情况:
image.png
归纳起来就是:
原坐标乘以一个转换矩阵B就能得到新坐标系中的坐标值。
透视变换
参考:
https://blog.csdn.net/xiaowei_cqu/article/details/26471527
https://blog.csdn.net/xiaowei_cqu/article/details/26478135
在OpenCV中,提供了用来计算变换矩阵的函数getperspectivetransform, 根据文档,透视变换矩阵是一个3*3的矩阵
网友评论