OpenCV C++校正AI模型检测到的文本(OCR)

这个程序使用OpenCV校正AI模型检测到的文本,方便后续识别这些文本。

输入是《OpenCV C++基于AI模型的场景文本检测(OCR)-CSDN博客》检测到的多边形:

这两个多边形很明显是倾斜的,后续的识别模型无法识别这种倾斜的文本,所以需要校正。

程序运行后生成校正后的图片:

现在只关注英文的结果。这个图片太长了,不利于识别,所以把它分作三段:

把这三张图片用《OpenCV C++基于AI模型的场景文本识别(OCR)-CSDN博客》里的程序识别,就可以很轻松识别出来了:

detResults是场景文本检测输出的多边形

代码:

cpp 复制代码
void fourPointsTransform(const Mat& frame, const Point2f vertices[], Mat& result)
{
    const Size outputSize = Size(100, 32);

    Point2f targetVertices[4] = {
        Point(0, outputSize.height - 1),
        Point(0, 0), Point(outputSize.width - 1, 0),
        Point(outputSize.width - 1, outputSize.height - 1)
    };
    Mat rotationMatrix = getPerspectiveTransform(vertices, targetVertices);

    warpPerspective(frame, result, rotationMatrix, outputSize);
}

int main(){
    if (detResults.size() > 0) {
        Mat recInput = frame;
           
        std::vector< std::vector<Point> > contours;
        for (uint i = 0; i < detResults.size(); i++){
            const auto& quadrangle = detResults[i];
            CV_CheckEQ(quadrangle.size(), (size_t)4, "");

            contours.emplace_back(quadrangle);

            std::vector<Point2f> quadrangle_2f;
            for (int j = 0; j < 4; j++)quadrangle_2f.emplace_back(quadrangle[j]);

            Mat cropped;
            fourPointsTransform(recInput, &quadrangle_2f[0], cropped);

            imshow("cropped",cropped);
            waitKey();
        }
    }
}
相关推荐
神仙别闹38 分钟前
基于 C++ 实现(控制台)学生成绩管理系统
开发语言·c++
会周易的程序员39 分钟前
5 节点边缘冗余方案(上):基于 aiRaft 的物联网高可用控制面设计
c++·分布式·物联网·raft·iot·共识
北方的银狐-Zero1 小时前
ERP 管执行,数据管标准,OntoL本体 管思考:企业智能化升级的规划图
大数据·人工智能·本体论
浅安的邂逅1 小时前
260918-白帽把 OpenAI 论坛“打穿“了:攻防赛漏洞、账户被 Claude 入侵、模型偷偷掩盖不当行为
人工智能·大模型·ai编程·ai模型·行业动态
jinyishu_1 小时前
认识 AI Agent:概念、架构、设计模式与主流框架
人工智能
Hrain-AI2 小时前
AI 爬虫三档授权工程落地:搜索放行、训练拦截、Agent 分层(附脚本)
人工智能·elasticsearch·milvus
sunhy_csdn2 小时前
“词码”作为 Token 候选译名
人工智能
Hrain-AI2 小时前
多 Agent 并行不打架:worktree 隔离与反馈回流落地(附脚本)
网络·数据库·人工智能·架构
Koi慢热2 小时前
DayDayMap学术社区体验:卫星网络测绘专题用下来怎么样
网络·人工智能·windows·web安全·网络安全