zoukankan      html  css  js  c++  java
  • python-opencv几何变换--仿射变换、透视变换

    仿射变换

    opencv提供了函数cv2.getAffineTransform()来创建一个2*3的矩阵,该矩阵传递给cv2.warpAffine()。该函数语法格式为:

    retval = cv.getAffineTransform(src, dst)
    '''
    src:输入图像的三个点坐标
    dst:输出图像的三个点坐标
    三个点分别对应左上角、右上角、左下角
    '''

    查看如下放射变换实例:

    import numpy as np
    import cv2 as cv
    
    img = cv.imread(r'Lena.png', 1)
    rows, cols, channels = img.shape
    p1 = np.float32([[0,0], [cols-1,0], [0,rows-1]])
    p2 = np.float32([[0,rows*0.3], [cols*0.8,rows*0.2], [cols*0.15,rows*0.7]])
    M = cv.getAffineTransform(p1, p2)
    dst = cv.warpAffine(img, M, (cols,rows))
    cv.imshow('original', img)
    cv.imshow('result', dst)
    cv.waitKey(0)
    cv.destroyAllWindows()

    效果图:

    imageimage

     

    透视变换

    上述仿射变换可以将矩形映射成任意平行四边形,各边仍保持平行;而透视变换可以将矩形映射为任意四边形,直线仍保持直线。

    由于不再是平行四边形,需提供四个顶点。

    透视变换通过函数cv2.warpPerspective()实现,语法为:

    dst = cv.warpPerspective(src, M, dsize[, flags[, borderMode[, borderValue]]])
    '''
    dst:透视后的输出图像,dsize决定输出图像大小
    src:输入图像
    M:3*3变换矩阵
    flags:插值方法,默认为INTER_LINEAR
    borderMode:边类型,默认为BORDER_CONSTANT
    borderValue:边界值,默认为0
    '''

    透视变换通过函数cv2.getPerspectiveTransform()来生成转换矩阵,需输入输入图像和输出图像的四个顶点的坐标。

    import numpy as np
    import cv2 as cv
    
    img = cv.imread(r'Lena.png', 1)
    rows, cols, channels = img.shape
    p1 = np.float32([[0,0], [cols-1,0], [0,rows-1], [rows-1,cols-1]])
    p2 = np.float32([[0,rows*0.3], [cols*0.8,rows*0.2], [cols*0.15,rows*0.7], [cols*0.8,rows*0.8]])
    M = cv.getPerspectiveTransform(p1,p2)
    dst = cv.warpPerspective(img, M, (cols, rows))
    cv.imshow('original', img)
    cv.imshow('result', dst)
    cv.waitKey(0)
    cv.destroyAllWindows()

    效果图:

    imageimage

  • 相关阅读:
    java并发编程(五)——线程池
    java并发编程(四)——无锁
    java并发编程(三)——java内存模型
    java并发编程(二)——加锁
    java并发编程(一)——进程与线程
    java中的异常和处理机制
    使用JDK自带的keytool工具生成证书
    JAVA 制作证书
    网络安全之证书相关概念
    maven之.lastUpdated文件
  • 原文地址:https://www.cnblogs.com/pheasant/p/13226182.html
Copyright © 2011-2022 走看看