opencv3 python3
pycharm windows7
如同放射变化,透视变换提供了getPerspectiveTransform用来生成矩阵,然后通过warpPerspective实现转换。
还是以每瓶为例说明。import cv2 as cvimport numpy as npimport copyimport osfrom matplotlib import pyplot as pltfrom skimage.measure import compare_ssimimport randomimage = cv.imread('c:\\meiping1.png')rows,cols,channel = image.shapeimage2 = copy.copy(image)
1)构建4个点的矩阵 ,注意:透视变换需要4个点 至少三个不共线。2)透视变换要3x3变换矩阵。 转换后直线是直线。3)变换矩阵,输入要4个点,输出图像上需要相应的点。picSrc = np.float32([[0,0],[cols,0],[0,rows],[cols,rows]])picDst = np.float32([[0,0],[cols, int(0.2*rows)],[0,rows],[cols,int(0.8*rows)]])M = cv.getPerspectiveTransform(picSrc, picDst)imageResult = cv.warpPerspective(image, M,(cols,rows))plt.subplot(121)plt.imshow(image)plt.title('image')plt.subplot(122)plt.imshow(imageResult)plt.title('imageResult')plt.show()
再拉一组类似星球大战开场梯形。picSrc = np.float32([[0,0],[cols,0],[0,rows],[cols,rows]])picDst = np.float32([[int(0.2*cols),0],[int(0.8*cols), 0],[0,rows],[cols,rows]])M1 = cv.getPerspectiveTransform(picSrc, picDst)imageResult1 = cv.warpPerspective(image, M1,(cols,rows))cv.imshow('imageResult1', imageResult1)cv.waitKey(0)
小结:通过调整 第二个矩阵4个坐标点就可以实现转换矩阵的变化,求出转换矩阵后使用cv.warpPerspective对原图进行转换。要注意4个点不共线
要四个点才行
通过调整目标矩阵的输出点坐标,就可轻易实现转换矩阵的获得,然后进行投影即可。