之前在放射变化之图像平移有一个变化矩阵M,之前我们是自定义的,cv2里面也给我们定义了API
M = cv2.getRotationMatrix2D(center,angle,scale)
image.png
img = cv2.warpAffine(img,M,dsize,flags,mode,value)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/env python
# -*- coding: UTF-8 -*-
"""
@Project :Opencv学习
@File :放射变化之获取变换矩阵.py
@IDE :PyCharm
@Author :咋
@Date :2023/1/13 18:33
"""
import cv2
import numpy as np
image = cv2.imread("Handsome.jpg")
image = cv2.resize(image,(640,480))
# 由API计算M
M = cv2.getRotationMatrix2D((240,640),30,1)
# 进行图像变化
warp_img = cv2.warpAffine(image,M,dsize = (640,480)) # dsize 是输出图像的大小
cv2.imshow("rotate_img",np.hstack((image,warp_img)))
cv2.waitKey(0)
cv2.destroyAllWindows()

image.png
M = cv2.getAffineTransform(src[],des[])

  • src原目标的三个点
  • dst对应变换后的三个点
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    #!/usr/bin/env python
    # -*- coding: UTF-8 -*-
    """
    @Project :Opencv学习
    @File :放射变化之获取变换矩阵.py
    @IDE :PyCharm
    @Author :咋
    @Date :2023/1/13 18:33
    """
    import cv2
    import numpy as np
    image = cv2.imread("Handsome.jpg")
    image = cv2.resize(image,(640,480))
    # 由API计算M
    # M = cv2.getRotationMatrix2D((240,320),30,1)
    # 由三个点计算M
    # 必须是32的整数
    src = np.float32([[200,100],[300,100],[200,300]])
    des = np.float32([[100,150],[360,200],[280,120]])
    M = cv2.getAffineTransform(src,des)
    # 进行图像变化
    warp_img = cv2.warpAffine(image,M,dsize = (640,480)) # dsize 是输出图像的大小
    cv2.imshow("rotate_img",np.hstack((image,warp_img)))
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    image.png