车牌字符分割—投影法

车牌字符的分割—投影

1.首先,定义一个数组用来储存每一列像素中白色像素的个数。

    int perPixelValue;//每个像素的值
    int* projectValArry = new int[width];//创建一个用于储存每列白色像素个数的数组
    memset(projectValArry, 0, width*4);//必须初始化数组
 
  • 1
  • 2
  • 3

2.然后,遍历二值化后的图片,将每一列中白色的(也就是数字区域)像素记录在数组中。

    //遍历每一列的图像灰度值,查找每一行255的值
    for (int col = 0; col < width; ++col)
    {
        for (int row = 0; row < height; ++row)
        {
            perPixelValue = binImg.at<uchar>(row, col);
            if (perPixelValue == 255)//如果是黑底白字
            {
                projectValArry[col]++;
            }
        }
    }
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

3.最后,根据数组里的灰度值画出投影图

 perPixelValue = 255;  //背景设置为白色。   
            verticalProjectionMat.at<uchar>(i, j) = perPixelValue;
        }
    }

    /*将直方图的曲线设为黑色*/
    for (int i = 0; i < width; i++)
    {
        for (int j = 0; j < projectValArry[i]; j++)
        {
            perPixelValue = 0;  //直方图设置为黑色  
            verticalProjectionMat.at<uchar>(height - 1 - j, i) = perPixelValue;
        }
    }
    imshow("【投影】",verticalProjectionMat);
    delete[] projectValArry;//删除数组空间
 

    有了投影图做切割就很容易了,其实最主要的就是那个储存灰度值的数组,下面就需要根据这个数组的内容来找到相邻字符间的分割点。

        vector<Mat> roiList;//用于储存分割出来的每个字符
        int startIndex = 0;//记录进入字符区的索引
        int endIndex = 0;//记录进入空白区域的索引
        bool inBlock = false;//是否遍历到了字符区内
        for (int i = 0; i < srcImg.cols; ++i)
        {
            if (!inBlock && projectValArry[i] != 0)//进入字符区了
            {
                inBlock = true;
                startIndex = i;
                cout << "startIndex is " << startIndex << endl;
            }
            else if (projectValArry[i] == 0 && inBlock)//进入空白区了
            {
                endIndex = i;
                inBlock = false;    
                Mat roiImg = srcImg(Range(0,srcImg.rows),Range(startIndex,endIndex+1));
                roiList.push_back(roiImg);
            }
        }
     
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20



       

    ©️2020 CSDN 皮肤主题: 编程工作室 设计师:CSDN官方博客 返回首页