图像二值化,顾名思义,将图像转换为只有两种值的图像。在将彩色图灰度化后,我们得到了一张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; }
这里我调整了自动取平均值阈值,可以选择手动阈值。
注:平均阈值转换的二值化图像可能严重失真,所以我们大部分情况采用手动阈值。
灰度图:
二值化图像:
原创文章,作者:奋斗,如若转载,请注明出处:https://blog.ytso.com/241289.html