算法的改进
Opened this issue · 0 comments
zouj168 commented
楼主您好:
拜读了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());