图像二值化,顾名思义,将图像转换为只有两种值的图像。在将彩色图灰度化后,我们得到了一张RGB值都是同一个值组成的灰度图,现在我们遍历这张图,计算这张图上所有像素的RGB值中任意一个G的和,再除以像素和,得到一个平均值,这个值就是二值化的阈值,大于这个值将这个像素值设为黑色,小于这个值设置为白色,最后就能得到一张由黑白组成的图片,即二值化图像。
下面是C#代码:
复制
/// <summary>
/// 图像二值化1:取图片的平均灰度作为阈值,低于该值的全都为0,高于该值的全都为255
/// </summary>
/// <param name="bmp"></param>
/// <returns></returns>
public static Bitmap ConvertTo1Bpp1(Bitmap bmp, String iss)
{
int average = 0;
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
Color color = bmp.GetPixel(i, j);
average += color.B;
}
}
int averages=0;
if (iss != "")
{
averages = Convert.ToInt32(iss);
}
else {
averages= (int)average / (bmp.Width * bmp.Height);
}
for (int i = 0; i < bmp.Width; i++)
{
for (int j = 0; j < bmp.Height; j++)
{
//获取该点的像素的RGB的颜色
Color color = bmp.GetPixel(i, j);
int value = 255 - color.B;
Color newColor = value > averages ? Color.FromArgb(0, 0, 0) : Color.FromArgb(255,
255, 255);
bmp.SetPixel(i, j, newColor);
}
}
return bmp;
}这里我调整了自动取平均值阈值,可以选择手动阈值。
注:平均阈值转换的二值化图像可能严重失真,所以我们大部分情况采用手动阈值。
灰度图:
二值化图像:







评论 (1)