1. 沿着 X X X 方向错切
设原始图像的任意点
P
0
(
x
0
,
y
0
)
P_0(x_0, y_0)
P0(x0,y0),沿
X
X
X 方向错切,经错切后
α
\alpha
α 角度后到新的位置
P
(
x
,
y
)
P(x,y)
P(x,y),
{
x
=
x
0
+
β
y
0
y
=
y
0
\left\{ \begin{matrix} x = x_0+ \beta y_0 \\ y = y_0 \end{matrix} \right.
{x=x0+βy0y=y0
如果错切角记为
θ
\theta
θ,即有
β
=
t
a
n
θ
\beta = tan\theta
β=tanθ 根据上式子,整理错切前后的坐标变换为
[
x
y
1
]
=
[
1
t
a
n
θ
0
0
1
0
0
0
1
]
[
x
0
y
0
1
]
\left[\begin{matrix} x\\ y \\ 1 \end{matrix}\right] =\left[\begin{matrix} 1 & tan\theta & 0\\ 0 & 1 & 0\\ 0 & 0 & 1 \end{matrix}\right] \left[\begin{matrix} x_0\\ y_0 \\ 1 \end{matrix}\right]
⎣⎡xy1⎦⎤=⎣⎡100tanθ10001⎦⎤⎣⎡x0y01⎦⎤
2. 沿着 y y y 方向错切
设原始图像的任意点
P
0
(
x
0
,
y
0
)
P_0(x_0, y_0)
P0(x0,y0),沿
X
X
X 方向错切,经错切后
α
\alpha
α 角度后到新的位置
P
(
x
,
y
)
P(x,y)
P(x,y),
{
x
=
x
0
y
=
y
0
+
α
x
0
\left\{ \begin{matrix} x = x_0\\ y = y_0 + \alpha x_0 \end{matrix} \right.
{x=x0y=y0+αx0
如果错切角记为
θ
\theta
θ,即有
α
=
t
a
n
θ
\alpha = tan\theta
α=tanθ 根据上式子,整理错切前后的坐标变换为
[
x
y
1
]
=
[
1
0
0
t
a
n
θ
1
0
0
0
1
]
[
x
0
y
0
1
]
\left[\begin{matrix} x\\ y \\ 1 \end{matrix}\right] =\left[\begin{matrix} 1 & 0 & 0\\ tan\theta & 1 & 0\\ 0 & 0 & 1 \end{matrix}\right] \left[\begin{matrix} x_0\\ y_0 \\ 1 \end{matrix}\right]
⎣⎡xy1⎦⎤=⎣⎡1tanθ0010001⎦⎤⎣⎡x0y01⎦⎤
3. 实战
import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt
# 错切
shearM = np.array([
[1, 0.3, 0],
[0, 1, 0]
], dtype=np.float32)
img = cv.imread('pic/rabbit500x333.jpg')
img_shear = cv.warpAffine(img, shearM, dsize=(400, 500))
plt.imshow(img_shear)
plt.show()
4. 效果
说明:
- 未经许可,谢绝转载。
- 本教程为《数字图像处理Python OpenCV实战》的配套代码相关内容。
免费视频教程为0-6章(标题号≤6),可在此处点击观看。
所有课件及源代码可在此处下载:
链接:https://pan.baidu.com/s/198PySe_vebO3e06idHSQ6g
提取码:11o4
有问题可在QQ群(1079300899)指出,进群答案:数字图像处理。