3.4 图像几何变换——图像错切

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θ10001x0y01

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θ0010001x0y01

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. 效果

3.4 图像几何变换——图像错切_第1张图片

说明:

  1. 未经许可,谢绝转载。
  2. 本教程为《数字图像处理Python OpenCV实战》的配套代码相关内容。
    免费视频教程为0-6章(标题号≤6),可在此处点击观看。
    所有课件及源代码可在此处下载:
    链接:https://pan.baidu.com/s/198PySe_vebO3e06idHSQ6g
    提取码:11o4
    有问题可在QQ群(1079300899)指出,进群答案:数字图像处理。

你可能感兴趣的:(数字图像处理,图像错切,Python实现)