前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >OpenCV图像处理中“投影技术”的使用

OpenCV图像处理中“投影技术”的使用

作者头像
OpenCV学堂
发布2020-12-08 14:35:08
1.2K0
发布2020-12-08 14:35:08
举报
问题引出

本文区分”问题引出“、”概念抽象“、”算法实现“三个部分由表及里具体讲解OpenCV图像处理中“投影技术”的使用,并通过”答题卡识别“”OCR字符分割”“压板识别”“轮廓展开分析”四个的例子具体讲解算法使用。使得读者能够对“投影技术”加速认识和理解,从而在解决具体问题的时候多一个有效方法。我第一次集中遇到需要“投影”技术解决的问题,是在“答题卡”项目中。

在这样采集到的图像中,大量存在黑色的定位区块:

如果进一步定位,可以得到这样的结果:

如果做成连续图像

在这波峰波谷中,存在着的“量化”结果,对应了答题卡中的定位关系

概念抽象

在前面的分析里,我们已经基本建立起“投影”的概念。从离散的角度来说,也就是:

局部最大值:F(x)>F(x−1)且F(x)>F(x+1)

局部最小值:F(x)<F(x−1)且F(x)<F(x+1)

类似于求极值、求切线等的情况。

算法实现

代码语言:javascript
复制
//投影到x或Y轴上,上波形为vup,下波形为vdown,gap为误差间隔

void projection2(Mat src,vector<int>& vup,vector<int>& vdown,int direction = DIRECTION_X,int gap = 10);

void projection2(Mat src, vector<int>& vup, vector<int>& vdown, int direction, int gap) {
    Mat tmp = src.clone();
    vector<int> vdate;
    if (DIRECTION_X == direction) {
        for (int i = 0; i < tmp.cols; i++) {
            Mat data = tmp.col(i);
            int itmp = countNonZero(data);
            vdate.push_back(itmp);
        }
    }
    else {
        for (int i = 0; i < tmp.rows; i++) {
            Mat data = tmp.row(i);
            int itmp = countNonZero(data);
            vdate.push_back(itmp);
        }
    }
    //整形,去除长度小于gap的零的洞
    if (vdate.size() <= gap)
        return;
    for (int i = 0; i < vdate.size() - gap; i++) {
        if (vdate[i] > 0 && vdate[i + gap] > 0) {
            for (int j = i; j < i + gap; j++) {
                vdate[j] = 1;
            }
            i = i + gap - 1;
        }
    }
    //记录上下沿
    for (int i = 1; i < vdate.size(); i++) {
        if (vdate[i - 1] == 0 && vdate[i] > 0)
            vup.push_back(i);
        if (vdate[i - 1] > 0 && vdate[i] == 0)
            vdown.push_back(i);
    }
}

在具体使用过程中,注意相关控制变量的管理

问题迁移

1、OCR字符分割

通过看字符的特点,里面加了一些单个点的干扰,可以通过纵向投影来过滤,编写代码,查看特征

在这样的OCR识别中,首先可以通过投影的方法,实现字符的分割。

2 . 压板识别

在这样的项目中,同样可以通过投影的方法,获得各个压板的准确定位。

3、轮廓展开分析

在类似树叶这样的测量中,可以通过“极坐标转换”,将树叶的这样的曲线转换成可以分析的投影,从而得到比如“树叶有多少个分叉”“有无缺陷”这样的定量信息。

君子藏器于身,待时而动

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-01,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 OpenCV学堂 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文字识别
文字识别(Optical Character Recognition,OCR)基于腾讯优图实验室的深度学习技术,将图片上的文字内容,智能识别成为可编辑的文本。OCR 支持身份证、名片等卡证类和票据类的印刷体识别,也支持运单等手写体识别,支持提供定制化服务,可以有效地代替人工录入信息。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档