ITPub博客

首页 > IT职业 > IT生活 > Java基于opencv实现图像数字识别(五)—投影法分割字符

Java基于opencv实现图像数字识别(五)—投影法分割字符

IT生活 作者:胡扯 时间:2021-09-09 09:33:34 0 删除 编辑

Java基于opencv实现图像数字识别(五)—投影法分割字符

水平投影法

1、水平投影法就是先用一个数组统计出图像每行黑色像素点的个数(二值化的图像);

2、选出一个最优的阀值,根据比这个阀值大或小,用一个数组记录相应Y轴的坐标;

3、因为是水平切割我们只需要Y轴的切割点即可,宽度默认图像的宽,高度可以用相邻的切割点相减得到;

4、优化切割点,把切割点靠近的都清除掉

5、设置感应区的区域,切割图片

垂直投影法和水平投影法类似,对比思考一下

因为我做的是表格的切割,你如果想实现验证码的切割,或者其他的类比这个,我想也是很容易实现的

我们先看一下,效果,还是很不错的


图片描述

投影法分割字符

水平切割代码

// 图像切割,水平投影法切割public List cutImgX() {    int i, j;    int nWidth = getWidth(), nHeight = getHeight();    int[] xNum = new int[nHeight], cNum;    int average = 0;// 记录像素的平均值
    // 统计出每行黑色像素点的个数
    for (i = 0; i  cutY = new ArrayList();    for (i = 0; i  average) {
            cutY.add(i);
        }
    }    // 优化cutY把
    if (cutY.size() != 0) {        int temp = cutY.get(cutY.size() - 1);        // 因为线条有粗细,优化cutY
        for (i = cutY.size() - 2; i >= 0; i--) {            int k = temp - cutY.get(i);            if (k  YMat = new ArrayList();    for (i = 1; i 

垂直投影法

// 图像切割,垂直投影法切割public List cutImgY() {    int i, j;    int nWidth = getWidth(), nHeight = getHeight();    int[] xNum = new int[nWidth], cNum;    int average = 0;// 记录像素的平均值
    // 统计出每列黑色像素点的个数
    for (i = 0; i  cutX = new ArrayList();    for (i = 0; i = average) {
            cutX.add(i);
        }
    }    if (cutX.size() != 0) {        int temp = cutX.get(cutX.size() - 1);        // 因为线条有粗细,优化cutY
        for (i = cutX.size() - 2; i >= 0; i--) {            int k = temp - cutX.get(i);            if (k  XMat = new ArrayList();    for (i = 1; i 

注:本文章参考了很多博客,感谢;主要是跟着一个博客来实现的https://blog.csdn.net/ysc6688/article/category/2913009(也是基于opencv来做的)感谢



作者:奇迹迪
链接:https://www.jianshu.com/p/25ac6dac1408

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/166/viewspace-2810710/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2019-04-11

  • 博文量
    0
  • 访问量
    500