OpenCV for Python之图像的几何变换

OpenCV for Python之图像的几何变换

  • 1 几何变换为何
  • 2 图像的缩放
  • 3 图像的平移
  • 4 图像的旋转
  • 5 图像的仿射变换
  • 6 图像的透视变换

Opencv4 官方文档 : https://docs.opencv.org/4.2.0/
Opencv4 for Python中文文档点击下载:OpenCV4 for Python 中文文档

1 几何变换为何

其实就是图像的变换 ,包括平移 ,旋转,缩放,仿射,透视等。

2 图像的缩放

def resize_demo(image):
    print("Origin size:", image.shape)
    # 第一种方法:通过fx,fy缩放因子
    res = cv.resize(image, None, fx=2, fy=2, interpolation=cv.INTER_CUBIC)
    print("After resize 1 size:", res.shape)
    # 第二种方法:直接设置输出图像的尺寸,所以不用设置缩放因子
    height,width = image.shape[:2]
    res=cv.resize(image,(2*width,2*height),interpolation=cv.INTER_CUBIC)
    print("After resize 2 size:", res.shape)

    while(1):
        cv.imshow('res',res)
        cv.imshow('img',image)
        if cv.waitKey(0) & 0xFF == ord("q"):
            break

效果:原图放大至两倍,改为小数的话就是缩小至相应倍数。

3 图像的平移

def move_demo(image):
    rows, cols = image.shape[:2]
    M = np.float32([[1, 0, 100], [0, 1, 50]])
    dst = cv.warpAffine(image, M, (cols, rows))
    cv.imshow('image', dst)

4 图像的旋转

def rotation_demo(img):
    rows, cols = img.shape[:2]
    # 将图像相对于中心旋转90度,而不进行任何缩放。旋转中心,角度,缩放比率
    M = cv.getRotationMatrix2D((cols / 2, rows / 2), 90, 1)
    dst = cv.warpAffine(img, M, (cols, rows))
    cv.imshow('original', img)
    cv.imshow('result', dst)
    cv.waitKey(0)
    cv.destroyAllWindows()

效果:

5 图像的仿射变换

在仿射变换中,原始图像中的所有平行线在输出图像中仍将平行。为了找到变换矩阵,我们需要输入图像中的三个点及其在输出图像中的对应位置。然后cv.getAffineTransform将创建一个2x3
矩阵,该矩阵将传递给cv.warpAffine

def perspective_demo(img):

    rows, cols, ch = img.shape

    pts1 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
    pts2 = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])

    M = cv.getPerspectiveTransform(pts1, pts2)

    dst = cv.warpPerspective(img, M, (300, 300))

    plt.subplot(121), plt.imshow(img), plt.title('Input')
    plt.subplot(122), plt.imshow(dst), plt.title('Output')
    plt.show()

效果:
OpenCV for Python之图像的几何变换_第1张图片

6 图像的透视变换

对于透视变换,需要3x3变换矩阵。即使在转换后,直线也将保持直线。要找到此变换矩阵,需要在输入图像上有4个点,在输出图像上需要相应的点。在这四个点中,其中三个不应共线。然后可以通过函数cv.getPerspectiveTransform找到变换矩阵。然后将cv.warpPerspective应用于此3x3转换矩阵。

def perspective_demo(img):
    rows, cols, ch = img.shape
    pts1 = np.float32([[56, 65], [368, 52], [28, 387], [389, 390]])
    pts2 = np.float32([[0, 0], [300, 0], [0, 300], [300, 300]])

    M = cv.getPerspectiveTransform(pts1, pts2)

    dst = cv.warpPerspective(img, M, (300, 300))

    plt.subplot(121), plt.imshow(img), plt.title('Input')
    plt.subplot(122), plt.imshow(dst), plt.title('Output')
    plt.show()

OpenCV for Python之图像的几何变换_第2张图片

转载请注明转自:https://leejason.blog.csdn.net/article/details/106442313

你可能感兴趣的:(OpenCV图像处理,opencv之图像的几何变换)