WildBloom

导航

 

原文地址http://opencv-python-tutroals.readthedocs.io/en/latest/py_tutorials/py_imgproc/py_geometric_transformations/py_geometric_transformations.html#geometric-transformations


目标

  • 学习将不同的几何变换应用到像平移、旋转、仿射变换等图像上。
  • 你会看到这些函数: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()

结果:

 

 

 

 

 

 

posted on 2019-03-25 11:58  WildBloom  阅读(405)  评论(0编辑  收藏  举报