目标
- 学习将不同的几何变换应用到像平移、旋转、仿射变换等图像上。
- 你会看到这些函数:cv2.getPerspectiveTransform
变换
OpenCV提供了两个变换函数,cv2.warpAffine 和cv2.warpPerspective,你可以使用后者进行各种各样的转换。cv2.warpAffine采用2x3变换矩阵,而cv2.warpPerspective以一个3x3的变换矩阵作为输入。
缩放
缩放仅仅是改变图片的大小。OpenCV使用cv2.resize() 来达到这个目的。图像的大小可以手动指定,也可以指定比例因子。使用不同的插值方法。
平移
平移是指物体位置的移动。
旋转
使图像旋转一个角度通过下面这种形式的变换矩阵来完成
仿射变换
在放射变换中,原图中的平行线,在输出的图片中照样是平行线。
透视变换
为了进行透视变换,你需要一个3*3的变换矩阵。即使在变换后,直线仍然是直线。为了找到变换矩阵,你需要在输入图片中找到4个点并确定输出图片与之对应的点。在这四个点中,其中3个不能再一条直线上。然后就可以通过cv2.getPerspectiveTransform.这个函数来计算变换矩阵。然后应用到cv2.warpPerspective 这个函数中。
代码如下:
img = cv2.imread('sudokusmall.png') 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 = cv2.getPerspectiveTransform(pts1,pts2) dst = cv2.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()
结果: