引子:
你是否遇到过这种情况:用手机对着身份证拍张照片,然后想打印出扫描件的效果?应用商城里有个热门app好像叫“扫描全能王”,大概提供了这个功能,但是它是收费的,普通用户用起来有些许不便。最近我也遇到了这个问题,别人用手机拍了个身份证照片传给我,如上面所示,让我把它打印出来:我最先想用PS,但是我发现无法用一个规则的矩形把它框得很好,我那没入门的PS技术无法解决这个问题,于是我就花了一晚上时间写了个程序,矫正结果如上面所示。本文将和大家分享一下我的代码。
一、矫正原理
根据宝典"Multiple View Geometry in Computer Vision",同一个相机从不同角度对一个平面成像,两个时刻成的像之间存在一个单应,也叫射影变换(3x3矩阵)。身份证表面是一个平面,现在的问题就是给定一个任意角度下拍摄的身份证照片,如何把它矫正成一个俯视视角下的照片,核心就是求解一个单应H。
单应是一个3阶矩阵,9个参数,8个自由度,求解单应需要8个线性方程,一对对应点(x,y)和可以构造2个线性方程,所以求解单应至少需要4对对应点。
如上图所示,我们依次选取身份证照片的左下角、左上角、右上角、右下角,然后将这四个位置坐标映射到一个标准矩形的四个顶点上,即可求出单应。在程序中,基于opencv的highgui实现了交互式从图像中选点ÿ