python在OpenCV里实现投影变换效果

  

前面学习了仿射变换,是经常使用到的变换,也很容易理解。在日常生活中,经常会遇到下面这种的情况:

  

 python在OpenCV里实现投影变换效果

  

仔细地观察比亚迪秦这台汽车的车牌,发现它拍照的角度不是垂直的方向,而是有一个角度,当要进行车牌识别的时候,发现字符是变形的,与电脑里比较的图片肯定有区别,因此识别不出来。这时怎么办呢?就需要经过一个投影变换才可以把车牌号纠正过来,才能进入识别过程。

  

好吧,到这里认识到投影变换的感性认识了,那么你又会继续考虑下一个问题,在软件里怎么样计算呢,难道还是使用仿射变换的矩阵。从这里看一下,前面闽一个比较大,后88年面比较小,说明原本平行的两边已经不平行了。仿射变换之后,平行的线还是平行的,因此这一点也是仿射变换与投影变换的区别。

  

投影变换只是保证同一条直线的点还是在同一条直线上,但不再保证平行了。因为投影变换是一个二维图像(车牌)经过一个三维变换,然后映射到另外一个二维空间,二维图像的二维空间与映射后的二维空间不一样,如果一样,就是仿射变换。投影变换也可以使用矩阵来进行描述,如下:

  

 python在OpenCV里实现投影变换效果

  

投影变换的矩阵是8个未知数,所以要四组不同的坐标点才可以计算出来,与前面的矩阵比较一下:

  

 python在OpenCV里实现投影变换效果

  

在OpenCV里是使用下面的公式计算:

  

 python在OpenCV里实现投影变换效果

  

因此只要构造了投影变换矩阵,其它的计算与仿射变换是一样的。下面通过例子来演示投影变换的功能:

        # python 3.7.4 opencv4.1   #蔡军生https://blog.csdn.net/caimouse/article/details/51749579   #   进口cv2   进口numpy np   #图片的路径   imgname=" img1.jpg "   #读取图片   形象=cv2。imread (imgname cv2.IMREAD_COLOR)   #图片的高度和宽度   h, w=image.shape (2):   #从目标坐标计算出3 x3的矩阵,然后调用warpPerspective执行   src=https://www.yisu.com/zixun/np.array ([[0], [w1, 0], [0, h], [h - w1,]], np.float32)   dst=np。50阵列([[100年],[w/2.0, 50], [h - 100], [h - w1,]], np.float32)   A1=cv2。getPerspectiveTransform (src, dst)   d1=cv2。warpPerspective(图片、A1 (w h), borderValue=125)   #显示操作之后的图片   d1 cv2.imshow (d1)   #显示图像   cv2。imshow(“形象”,图片)   #等待用户输入,然后删除所有窗口   cv2.waitKey (0)   cv2.destroyAllWindows ()      

结果输出如下:

  

 python在OpenCV里实现投影变换效果

  

在这个例子里,先行构造四组坐标点,然后调用<代码> getPerspectiveTransform 函数计算投影变换矩阵,然后调用函数<代码> warpPerspective>   

  

以上所述是小编给大家介绍的python在OpenCV里实现投影变换效果,希望对大家有所帮助,如果大家有任何疑问请给我留的言,小编会及时回复大家的。在此也非常感谢大家对网站的支持。
  如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

python在OpenCV里实现投影变换效果