行分割:行扫描计算灰度值和。
int cutrow(Mat& src, Mat& row_top, Mat& row_down)//左右切割
{
int top, down;
top = 0;
down = src.rows;
int i;
for (i = 0; i < src.rows; i++)
{
int rowValue = getRowSum(src, i);
if (rowValue > 0)
{
top = i;
break;
}
}
if (top == 0)
{
return 1;
}
for (; i < src.rows; i++)
{
int rowValue = getRowSum(src, i);
if (rowValue == 0)
{
down = i;
break;
}
}
int hight = down - top;
Rect rect( 0,top, src.cols,hight );
row_top = src(rect).clone();
Rect rectDown(0, down, src.cols, src.rows - hight);
row_down = src(rectDown).clone();
//cutTop(leftImg, leftImg);
return 0;
}
int getRowSum(Mat src, int row)
{
int sum = 0;
int height = src.rows;
int width = src.cols;
for (int i = 0; i < width; i++)
{
sum += src.at <uchar>(row, i);
}
return sum;
}
ref
https://blog.csdn.net/Print_lin/article/details/80143002
https://blog.csdn.net/iamdll/article/details/79216320
单行数字识别
同种字体模板匹配
int getSubtract(Mat &src, int TemplateNum) //两张图片相减
{
Mat img_result;
int min = 1000000;
int serieNum = 0;
for (int i = 0; i < TemplateNum; i++)
{
char name[20];
sprintf_s(name, ".\\模板\\%dLeft.jpg", i);
Mat Template = imread(name, CV_LOAD_IMAGE_GRAYSCALE);
threshold(Template, Template, 100, 255, CV_THRESH_BINARY);
threshold(src, src, 100, 255, CV_THRESH_BINARY);
resize(src, src, Size(32, 48), 0, 0, CV_INTER_LINEAR);
resize(Template, Template, Size(32, 48), 0, 0, CV_INTER_LINEAR);//调整尺寸
absdiff(Template, src, img_result);
int diff = 0;
getPXSum(img_result, diff);
if (diff < min)
{
min = diff;
serieNum = i;
}
}
if (serieNum == 10)
printf(".");
else
printf("%d ", serieNum);
return serieNum;
}