一个有趣问题的分析--寻找并且增强印章

1、先验知识:
“印章”有两个明显特点:红的,圆的。这都有可能是准确识别、进而增强的依据。因为我们要识别的图片,印章不是很清楚,所以其圆的特性有可能不成立,所以我主要通过颜色来分析。
2、具体实现:
2.1 依据红色的区域
通过域的转换,首先找到“红色”区域:
    Mat src = imread("e:/template/stamp.png");
    Mat temp; Mat temp1; Mat temp2; Mat temp3;
    vector<Mat> planes;
    cvtColor(src, src, COLOR_BGR2HSV);
    split(src, planes);
    //equalizeHist(planes[2], planes[2]);//对v通道进行equalizeHist
    merge(planes, temp);
    //cvtColor(temp, src, COLOR_HSV2BGR);
    inRange(temp, Scalar(0, 43, 46), Scalar(10, 255, 255), temp1);
    inRange(temp, Scalar(156, 43, 46), Scalar(180, 255, 255), temp2);
    temp3 = temp1 + temp2;
    dilate(temp3, temp3, Mat());
    erode(temp3, temp3, Mat());
后续还可以进一步通过轮廓分析、联通区域分析的思路,将这些噪音去掉。由于这里只有一副图片,我就不过分优化。
2.2 但是这里也有一种直接通过颜色变换的方法,得出的效果也非常不错:
2.3 依据S 区域的筛选
    Mat src = imread("e:/template/stamp.png");
    Mat red(src.size(), CV_8UC3, Scalar(0,0,255));
    Mat temp; Mat temp1; Mat temp2; Mat temp3;
    vector<Mat> planes;
    cvtColor(src, temp, COLOR_BGR2HSV);
    inRange(temp, Scalar(0, 43, 46), Scalar(10, 255, 255), temp1);
    //copyTo(red, src, temp1);
    split(temp, planes);
    Mat s = planes[1];
    cv::threshold(s, s, 50, 255, THRESH_OTSU);
    copyTo(red, src, s);
    waitKey(0);
    return(0);
    inRange(src, Scalar(0, 0, 180), Scalar(170, 170, 255), temp1);
3、增强结论:
一个最简单的方法,就是将这些区域全部设定为红色。结果是有一点过强了,但是思路应该是可行的。







posted on   jsxyhelu  阅读(40)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示