目标
学习将不同的几何变换应用到像平移、旋转、仿射变换等图像中。
你会看到这些函数:cv.getPerspectiveTransform
转换
OpenCV提供了两个转换函数,cv.warpAffine 和 cv.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()