美文网首页
1.9 openCV-python 几何变换

1.9 openCV-python 几何变换

作者: wangsb_2020 | 来源:发表于2020-02-21 22:10 被阅读0次

    几何变换

    学习对图像进行各种几个变换,例如移动,旋转,仿射变换等。
    #扩展缩放
    import cv2
    import numpy as np
    
    img = cv2.imread('namei.jpeg')
    res1 = cv2.resize(img, None, fx=0.2, fy=0.2, interpolation=cv2.INTER_CUBIC)
    
    #OR
    # 这里呢,我们直接设置输出图像的尺寸,所以不用设置缩放因子
    height, width = img.shape[:2]
    res2 = cv2.resize(img, (2*width, 2*height), interpolation=cv2.INTER_CUBIC)
    
    cv2.imshow('res1', res1)
    cv2.imshow('res2', res2)
    cv2.imshow('namei', img)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    image.png
    # 平移
    import cv2
    import numpy as np
    img = cv2.imread('namei.jpeg')
    rows, cols = img.shape[:2]
    
    # 定义平移矩阵,需要是numpy的float32类型
    # x轴平移200,y轴平移100, 2*3矩阵
    M = np.float32([[1,0,200], [0,1,100]])
    # 用仿射变换实现平移
    img_m = cv2.warpAffine(img, M, (cols, rows), borderValue=(255,255,0))
    # 警告:函数cv2.warpAffine() 的第三个参数的是输出图像的大小,它的格式
    # 应该是图像的(宽,高)。应该记住的是图像的宽对应的是列数,高对应的是行
    # 数。
    cv2.imshow('move', img_m)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    image.png
    # 旋转
    # 在不缩放的情况下将图像旋转90 度。
    import cv2
    import numpy as np
    img = cv2.imread('namei.jpeg')
    rows, cols = img.shape[:2]
    
    # 这里的第一个参数为旋转中心,第二个为旋转角度,第三个为旋转后的缩放因子
    # 可以通过设置旋转中心,缩放因子,以及窗口大小来防止旋转后超出边界的问题
    M = cv2.getRotationMatrix2D((cols/2, rows/2), 45, 1)
    
    # 第三个参数是输出图像的尺寸中心
    dst = cv2.warpAffine(img, M, (cols, rows))
    
    cv2.imshow('namei', img)
    cv2.imshow('dst', dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    image.png
    # 仿射变换
    ## 在仿射变换中,原图中所有的平行线在结果图像中同样平行
    import cv2
    import numpy as np
    import matplotlib.pyplot as plt
    
    img = cv2.imread('namei.jpeg')
    rows, cols, channels = img.shape
    print(img.size)
    print(img.shape)
    
    pts1=np.float32([[50,50],[200,50],[50,200]])
    pts2=np.float32([[10,100],[200,50],[100,250]])
    
    M = cv2.getAffineTransform(pts1, pts2)
    dst = cv2.warpAffine(img, M, (cols, rows))
    cv2.imshow('Input', img)
    cv2.imshow('Output', dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    image.png
    # 透视变换
    import cv2
    import numpy as np
    img = cv2.imread('namei.jpeg')
    rows, cols, channels = img.shape
    pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
    pts2 = np.float32([[0,0],[300,50],[50,300],[300,300]])
    M = cv2.getPerspectiveTransform(pts1, pts2)
    dst = cv2.warpPerspective(img, M, (cols, rows))
    
    cv2.imshow('Input', img)
    cv2.imshow('Output', dst)
    cv2.waitKey(0)
    cv2.destroyAllWindows()
    
    image.png

    相关文章

      网友评论

          本文标题:1.9 openCV-python 几何变换

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