透视矫正

接上一篇从视野中识别出A4纸后,如何将几何畸变的图行变换成正视图呢。先让我们来看看效果:

主要用到的知识叫做透视变换,在看具体代码前,先简单的梳理一下实现的程序流程:
1、得到矩形轮廓的四个角点
2、得到你变换后的图片大小的四个角点(这里本文选择了和原图片分辨率一样的大小,注意这里的四个角点和前面的四个角点顺序要对应上,顺序为,左上,右上,左下,右下)
3、通过getPerspectiveTransform()函数得到透视变换矩阵
4、通过warpPerspective()透视变换就可以得到了
具体的原理本文就不累述了,网上讲解的也很多,下面是给出的代码,是可以直接接在上一篇直接使用的,另外欢迎关注本人微信公众号share space,查看更多分享和资源。

//得到图片的高度和宽度
   int width = src.cols;
   int height = src.rows;

   vector<Point2f> src_corners(4);
       src_corners[0] = squares[idex][3]; // 提取出来的轮廓的4个点,这里调整了一下顺序是为了左上 右上,左下,右下对应上
       src_corners[1] = squares[idex][0];
       src_corners[2] = squares[idex][2];
       src_corners[3] = squares[idex][1];

       vector<Point2f> dst_corners(4);
       dst_corners[0] = Point(0, 0); // 原图中4个点到图像的宽高上 的透视变换关系
       dst_corners[1] = Point(width, 0);
       dst_corners[2] = Point(0, height);
       dst_corners[3] = Point(width, height);

       // 获取透视变换矩阵
       Mat resultImage;
       Mat warpmatrix = getPerspectiveTransform(src_corners, dst_corners); // 获取上述关系的透视变换矩阵
       warpPerspective(src, resultImage, warpmatrix, resultImage.size(), INTER_LINEAR); // 透视变换
       namedWindow("Final Result", CV_WINDOW_NORMAL);
       imshow("Final Result", resultImage);

猜你喜欢

转载自blog.csdn.net/weixin_43053387/article/details/84937825
今日推荐