美文网首页OpenCV@IT·互联网程序员
小强学Python+OpenCV之-1.4.1平移、旋转、缩放、

小强学Python+OpenCV之-1.4.1平移、旋转、缩放、

作者: Eric_AIPO | 来源:发表于2017-05-21 22:29 被阅读400次

下面我们将进入实际的图像处理阶段。
本阶段,我们将分别学习图像的平移、旋转、缩放、翻转、裁剪、算术运算、位运算、掩膜(mask)、通道分离及合并等技术。

目标

本节我们学习下面几个简单的操作:

  1. 平移(translation)
  2. 旋转(rotation)
  3. 缩放(resizing)
  4. 翻转(flipping)

变换矩阵

图像的各种操作都可以反应为矩阵的算术运算。比如:

1.平移

图像的平移操作是指:图像沿X方向或Y方向(或两者同时)进行的整体移动。平移变换对应矩阵运算中的加法。

目标位置:
x’ = x + tx
y’ = y + ty

(tx, ty)叫作转换矩阵或平移矩阵。上面的公式也可用表示如下:

2.旋转

图像的旋转对应矩阵的乘法,如下:
(x, y)绕原点逆时针旋转θ度角到(x', y')的变换公式是:
x' = x * cosθ - y * sinθ
y' = x * sinθ + y * cosθ
用矩阵表示为:

3.缩放

图像的缩放对应的也是矩阵乘法,如下:
x' = sx * x
y' = sy * y
用矩阵表示为:

4.翻转

翻转对应的也是同样是矩阵简洁,中是有点特殊:
沿X轴翻转:
x' = -x
y' = y
用矩阵表示为:

沿Y轴反转:
x' = x
y' = -y
用矩阵表示为:

仿射变换

也许你看出了问题,那就是:除了平移,其它变换都可以用矩阵乘法来表示。那么能不能让平移变换也转换成矩阵的乘法运算呢?这样就可以统一了。答案是,可以的。那就是用仿射变换。
即用三维向量(x, y, 1)表示二维向量。
那么,上面的平移,旋转,绽放,翻转就可以转变如下。

1. 平移

设某点向x方向移动 tx, y方向移动 ty, (x, y)为变换前坐标,(X, Y)为变换后坐标。
则 X = x + tx; Y = y + ty;
以矩阵表示:

2. 旋转

设某点 (x, y) 以原点为圆心,以该点与原点连线为半径, 逆时针旋转θ度。新的位置(X, Y)
X = x * cosa - y * sina;
Y = x * sina + y * cosa;
以矩阵表示:

3. 缩放

设某点坐标(x, y),在x轴方向扩大 sx倍,y轴方向扩大 sy倍,变换后坐标为(X, Y)。
X = sx * x;
Y = sy * y;
以矩阵表示:


4. 翻转

设某点坐标(x, y)
沿x轴翻转,转换后的坐标(X, Y)。
X = -x;
Y = y;
以矩阵表示:

沿y轴翻转,转换后的坐标(X, Y)。
X = x;
Y = -y;
以矩阵表示:

参考:

  1. 变换矩阵
  2. 仿射变换

相关文章

网友评论

    本文标题:小强学Python+OpenCV之-1.4.1平移、旋转、缩放、

    本文链接:https://www.haomeiwen.com/subject/stkvxxtx.html