OpenCV中的转换概念

mf_*_*041 4 c++ opencv image-processing computer-vision

我是opencv的新手.我现在正在使用OpenCV中的图像转换概念.所以我的问题是,

1)为什么仿射变换使用2*3矩阵和透视变换使用3*3矩阵?

2)何时使用仿射变换和透视变换相互之间?

有什么建议?

Mic*_*nov 8

1)这不是关于OpenCV的问题,而是关于数学的问题.将仿射变换应用于point(x,y)意味着以下内容:

x_new = a*x + b*y + c;
y_new = d*x + e*y + f;
Run Code Online (Sandbox Code Playgroud)

因此,仿射变换具有6个自由度:a,b,c,d,e,f.它们存储在2x3矩阵中:第一行中的a,b,c,第二行中的d,e,f.您可以通过乘以矩阵和向量将变换应用于点.

(x,y)的透视变换将是:

z = g*x + h*y + 1;
x_new = (a*x + b*y + c)/z;
y_new = (d*x + e*y + f)/z;
Run Code Online (Sandbox Code Playgroud)

如您所见,它具有8个自由度,存储在3x3矩阵中.第三行是g,h,1.

有关为什么这种表示如此方便的更多信息,请参见齐次坐标.

2)仿射变换也被称为"弱透视"变换:如果你正在寻找在从不同的角度,但该场景的大小一些场景是小相对向摄像机的距离(即,平行线保持或多或少平行),比你可以使用仿射变换.否则将需要透视变换.