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

名片的版面分割

作者: 古界族邪神 | 来源:发表于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