OpenCV C++基于极值区域滤波算法的场景文本检测(OCR)

这个程序使用OpenCV text模块实现基于极值区域滤波算法的场景文本检测。

第一组输入输出:

第二组输入输出:

代码:

cpp 复制代码
#include  "opencv2/text.hpp"
#include  "opencv2/highgui.hpp"
#include  "opencv2/imgproc.hpp"

#include  <vector>
#include  <iostream>
#include  <iomanip>

void er_show(vector<Mat> &channels, vector<vector<ERStat> > &regions)
{
    for (int c=0; c<(int)channels.size(); c++)
    {
        Mat dst = Mat::zeros(channels[0].rows+2,channels[0].cols+2,CV_8UC1);
        for (int r=0; r<(int)regions[c].size(); r++)
        {
            ERStat er = regions[c][r];
            if (er.parent != NULL) 
            {
                int newMaskVal = 255;
                int flags = 4 + (newMaskVal << 8) + FLOODFILL_FIXED_RANGE + FLOODFILL_MASK_ONLY;
                floodFill(channels[c],dst,Point(er.pixel%channels[c].cols,er.pixel/channels[c].cols),
                          Scalar(255),0,Scalar(er.level),Scalar(0),flags);
            }
        }
        char buff[20]; char *buff_ptr = buff;
        sprintf(buff, "channel %d", c);
        imshow(buff_ptr, dst);
    }
    waitKey(0);
}

int main()
{
    Mat src = imread("scenetext_segmented_word01.jpg");

    vector<Mat> channels;
    computeNMChannels(src, channels);

    int cn = (int)channels.size();
    for (int c = 0; c < cn-1; c++)
        channels.push_back(255-channels[c]);

    Ptr<ERFilter> er_filter1 = createERFilterNM1(loadClassifierNM1("trained_classifierNM1.xml"),16,0.00015f,0.13f,0.2f,true,0.1f);
    Ptr<ERFilter> er_filter2 = createERFilterNM2(loadClassifierNM2("trained_classifierNM2.xml"),0.5);

    vector<vector<ERStat> > regions(channels.size());
    for (int c=0; c<(int)channels.size(); c++)
    {
        er_filter1->run(channels[c], regions[c]);
        er_filter2->run(channels[c], regions[c]);
    }

    vector< vector<Vec2i> > region_groups;
    vector<Rect> groups_boxes;
    erGrouping(src, channels, regions, region_groups, groups_boxes, ERGROUPING_ORIENTATION_HORIZ);

    er_show(channels,regions);

    er_filter1.release();
    er_filter2.release();
    regions.clear();
    if (!groups_boxes.empty())
    {
        groups_boxes.clear();
    }
}

text模块里有提供trained_classifierNM1.xml和trained_classifierNM2.xml

相关推荐
见闻小天地1 分钟前
简博斯JG-C系列彩色激光同轴位移计:摄像头模组对位与行程测量的技术价值观察
人工智能·算法
kyy0010615 分钟前
出海 AI 聚合 API,重塑漫剧工业化生产节奏
人工智能
具身AGI16 分钟前
视频即仿真,物理AI 人类学习路线 的下一步
人工智能·学习
拿本唠嗑AI研究30 分钟前
智能时代,AI安全治理重塑产业风口:一份政策解读
人工智能·安全·风口·政策·机会
ChampaignWolf34 分钟前
在 SAP S/4HANA 内部基于 ICF Handler 从零实现 ABAP MCP Server:架构、代码与踩坑实录
c++·架构·sap·abap·mcp
楚识科技37 分钟前
手写OCR工程接入实录:图像预处理、后处理校验与置信度分层的完整链路
人工智能·计算机视觉·ocr
葫三生43 分钟前
《论三生原理》神话学构想与“神话历史”理论、《古史中的神话》思路异同?
大数据·人工智能·科技·深度学习·算法
昇腾知识体系1 小时前
昇腾 950 RegBase 性能优化:从 msprof 采数到优化手法
人工智能·华为·性能优化·知识图谱
七牛云行业应用1 小时前
Cursor Origin发布:同一天GitHub宕机,AI原生代码托管来了
人工智能·github·agent·ai编程·ai-native
MobotStone1 小时前
WorkBuddy 技术解析:核心并不神秘,真正壁垒在产品化、生态与规模工程
人工智能·agent