美文网首页
名片的版面分割

名片的版面分割

作者: 古界族邪神 | 来源:发表于2019-11-30 17:12 被阅读0次

    作者:鸭大楚春秋 老师:曾老师
    参考:https://blog.51cto.com/boytnt/1686307

    提取好照片的名片部分之后
    我发现使用轮廓的办法会很影响名片的倾斜校正,需要改进。
    下一步是版面分析,要把不同的版块分割好,包括文字块,图像块等等

    过程简要来说就是二值化,两次腐蚀,寻找轮廓,筛选轮廓,寻找轮廓的最小外接矩形
    重点是getStructuringElement,文字是横着的,所以结构元素(即内核)要长大于宽,列数大于行数
    经过多次尝试,列数=4*行数比较合适

    int element_size = 1;
        int s = element_size * 2 + 1;//必须是奇数
        Mat structureElement = getStructuringElement(MORPH_RECT, Size(4*s, s), Point(-1, -1));
    
    
        erode(binPic, binPic, structureElement);
        erode(binPic, binPic, structureElement);
    

    结果


    block.jpg block2.jpg block3.jpg block16.jpg block18.jpg

    截取矩形的标准值得说说,长和宽必须大于20,矩形面积不得大于总面积的30%

    vector<Rect> boundRect(contours.size());
        
        for (int i = 0; i < contours.size(); i++)
        {
            boundRect[i] = boundingRect(Mat(contours[i]));
            
            if(boundRect[i].height>20&& boundRect[i].width>20&&boundRect[i].width*1.0/boundRect[i].height>0.2&&boundRect[i].width* boundRect[i].height<0.3*srcPic.cols*srcPic.rows)
            { 
                stringstream ss;
                String res;
                ss << i;
                ss >> res;
                String divisionRes="block3/division"+res+".jpg";
                Mat finalResult = srcPic(boundRect[i]);
                imwrite(divisionRes, finalResult);
                
            }
            
        }
    
    resultTest3.jpg

    分割结果


    final.png

    几个结果图


    division49.jpg division50.jpg division51.jpg division52.jpg

    相关文章

      网友评论

          本文标题:名片的版面分割

          本文链接:https://www.haomeiwen.com/subject/lxwowctx.html