AstarLight/my_scanner

算法的改进

Opened this issue · 0 comments

楼主您好:
拜读了ocr系列文章,收益颇大,在此感谢。
用您的这套代码我测试了一下,效果很不错,但发现有两个不足之处:
1. 大分辨率图片达不到预期效果。
2. 速度偏慢

   我做了一些改进:.先将原始图片先resize缩小保存。然后求出轮廓的4个顶点后,将顶点坐标原比例恢复,例如开始缩小为原图片0.2,此时顶点坐标乘以5得到4个顶点在原始图片上的坐标,然后在原始图片做最后变换,
   改进依据是求直线只需两点即可,改进后解决了以上问题。

    代码片段如下:
    1.
    double g_fMagnification = 5;
    double g_fMagnificine = 0.2;

    2.
    Mat buckup = src.clone();
    imshow("src img", src);
double scale=g_fMagnificine; 
Size dsize = Size(src.cols*scale,src.rows*scale);
resize(src, src,dsize);
    Mat source = src.clone();

   3.
         sortCorners(corners, center);
        cout << "corners size" << corners.size() << endl;
        cout << "tl:" << corners[0] << endl;
        cout << "tr:" << corners[1] << endl;
        cout << "br:" << corners[2] << endl;
        cout << "bl:" << corners[3] << endl;

     corners[0].x *=g_fMagnification;
     corners[1].x *=g_fMagnification;
     orners[2].x *=g_fMagnification;
     corners[3].x *=g_fMagnification;
     corners[0].y *=g_fMagnification;
     corners[1].y *=g_fMagnification;
     corners[2].y *=g_fMagnification;
     corners[3].y *=g_fMagnification;

         4.
         cv::Mat transmtx = cv::getPerspectiveTransform(corners, quad_pts);
        //cv::warpPerspective(source, quad, transmtx, quad.size());
    cv::warpPerspective(buckup, quad, transmtx, quad.size());