python-opencv Tutorials 一码人翻译(11)图像处理— 图像的几何变换 平移 旋转 扩展

目标

学习将不同的几何变换应用到像平移、旋转、仿射变换等图像中。

你会看到这些函数:cv.getPerspectiveTransform

转换

OpenCV提供了两个转换函数,cv.warpAffinecv.warpPerspective,你可以有各种各样的变换。cv.warpAffine在简历中采用了2x3转换矩阵。cv.warpPerspective接受一个3x3转换矩阵作为输入。

  • 扩展

缩放只是调整图像大小。OpenCV有一个功能cv.调整大小()来实现这个目的。图像的大小可以手动指定,或者您可以指定比例因子。使用了不同的插值方法。更好的插值方法是cv。收缩和cv之间的区域。INTER_CUBIC(缓慢)和简历。INTER_LINEAR缩放。默认情况下,使用的插值方法是cv。用于所有调整大小的线性关系。您可以根据以下方法调整输入图像的大小:

import numpy as np
import cv2 as cv

img = cv.imread('lenna.jpg')

res = cv.resize(img,None,fx=2, fy=2, interpolation = cv.INTER_CUBIC)

#OR

height, width = img.shape[:2]
res = cv.resize(img,(2*width, 2*height), interpolation = cv.INTER_CUBIC)
cv.imshow('img1',img)
cv.imshow('img',res)
cv.waitKey(0)
cv.destroyAllWindows()

  • 平移
import numpy as np
import cv2 as cv

img = cv.imread('lenna.jpg',0)
rows,cols = img.shape

M = np.float32([[1,0,10],[0,1,50]])
dst = cv.warpAffine(img,M,(cols,rows))

cv.imshow('img',dst)
cv.waitKey(0)
cv.destroyAllWindows()

 

  • 旋转
import numpy as np
import cv2 as cv

img = cv.imread('lenna.jpg',0)
rows,cols = img.shape

# cols-1 and rows-1 are the coordinate limits.
M = cv.getRotationMatrix2D(((cols-1)/2.0,(rows-1)/2.0),90,1)
dst = cv.warpAffine(img,M,(cols,rows))
cv.imshow('img2',img)
cv.imshow('img',dst)
cv.waitKey(0)
cv.destroyAllWindows()

 

  • 仿射变换

    
    import cv2 as cv
    
    import numpy as np
    
    from matplotlib import pyplot as plt
    
    img = cv.imread('lenna.jpg',0)
    rows,cols =img.shape
    
    pts1 = np.float32([[50,50],[200,50],[50,200]])
    pts2 = np.float32([[10,100],[200,50],[100,250]])
    
    M = cv.getAffineTransform(pts1,pts2)
    
    dst = cv.warpAffine(img,M,(cols,rows))
    
    plt.subplot(121),plt.imshow(img),plt.title('Input')
    plt.subplot(122),plt.imshow(dst),plt.title('Output')
    plt.show()
    

     

  • 透视变换

     
    import cv2 as cv
    
    import numpy as np
    
    from matplotlib import pyplot as plt
    
    
    img = cv.imread('park.png')
    rows,cols,ch = img.shape
    
    pts1 = np.float32([[56,65],[368,52],[28,387],[389,390]])
    pts2 = np.float32([[0,0],[500,0],[0,500],[500,500]])
    
    M = cv.getPerspectiveTransform(pts1,pts2)
    
    dst = cv.warpPerspective(img,M,(500,500))
    
    plt.subplot(121),plt.imshow(img),plt.title('Input')
    plt.subplot(122),plt.imshow(dst),plt.title('Output')
    plt.show()
    

     

猜你喜欢

转载自blog.csdn.net/qq_41905045/article/details/81324951