您的位置:首页 > 其它

整体倾斜度调整

2015-11-06 22:51 176 查看
扫描图像中的前景可能存在一定程度的倾斜,本文以一行倾斜的数字为例,需要进行适当的调整以使字符处在同一水平位置,这样既有利于后续的字符分割,也可以降低字符识别的难度。

一般来说,对于若干字符组成的图像,如果左右两边字符像素的平均位置有比较大的起落,就说明图像存在倾斜。因此可以根据图像左右两边的黑色像素的平均高度进行调整。

算法首先逐行扫描左半部分和有半部分图像,分别计算出起黑色像素的平均加权高度(给靠两边的像素更多的权重);在此基础上计算出斜率,根据斜率重新组织图像。这实际上是一个从新图像到旧图像的像素映射过程,属于图像几何变换的范畴。

代码如下:

/****************************************************************
功能: 调整图像中前景物体的倾斜度,使其尽量处于一个水平位置上。比较适合于横向分布的物体,如        字符调整
参数:
注  : 只能处理二值图像
返回值:  无
***************************************************************/
void Ctry::OnTryTyr1()
{
//TODO:  在此添加命令处理程序代码
IplImage* img = cvLoadImage("C:\\Users\\Administrator\\Desktop\\2.jpg", -1);
IplImage* dst = cvCreateImage(cvGetSize(img), IPL_DEPTH_8U, 1);
int i, j;
int nWeightSum = 0;             //统计皮平均加权高度时的权重和
double dAvgLHeight = 0;      //图像左半部分前景物体的平均高度
double dAvgRHeight = 0;      //图像右半部分前景物体的平均高度

//逐行扫描左半部分图像,计算黑色像素的平均加权高度
for (i = 0; i < img->height; i++)
{
for ( j = 0; j < img->width/2; j++)
{
double nGray = cvGetReal2D(img, i, j);
if (int(nGray) == 0)  //是前景物体,黑
{
//计算高度的加权和,给靠两边的像素分配更多的权重
nWeightSum += img->width / 2 - j;
dAvgLHeight += i*(img->width / 2 - j);
}
}
}

dAvgLHeight /= nWeightSum;
nWeightSum = 0;

//逐行扫描左右部分图像,计算黑色像素的平均加权高度
for (i = 0; i < img->height; i++)
{
for (j = img->width/2; j < img->width; j++)
{
double nGray = cvGetReal2D(img, i, j);
if (int(nGray) == 0)  //是前景物体,黑
{
//计算高度的加权和,给靠两边的像素分配更多的权重
nWeightSum += j - img->width / 2;
dAvgRHeight += i*(j - img->width / 2);
}
}
}

dAvgRHeight /= nWeightSum;
//计算斜率
double dSlope = (dAvgLHeight - dAvgRHeight) / (img->width / 2);

int nYSrc;        //Y的源坐标

//扫描新图像,根据斜率得到的新旧图像的映射关系为每一个像素赋值
for ( i = 0; i < img->height; i++)
{
for ( j = 0; j < img->width; j++)
{
//找到与新图像的当前点对应的旧图像点的水平坐标(以水平方向中心为中心)
nYSrc = int(i - (j - img->width / 2)*dSlope);
if (nYSrc<0||nYSrc>=img->height) //对应点不在图像区域内
{
cvSetReal2D(dst,i, j, 255);
}
else
{
double pixel = cvGetReal2D(img, nYSrc, j);
cvSetReal2D(dst, i, j, pixel);
}
}
}
cvSaveImage("C:\\Users\\Administrator\\Desktop\\dst.jpg", dst);
}
效果图:


调整后:


明显平行了很多,效果还不错
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: