C#二值图像算法

顾名思义,图像二值化将图像转换成只有两个值的图像 在将彩色图像灰度化之后,我们获得了具有相同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;
 }

这里我调整了自动取平均值阈值,可以选择手动阈值。

注:平均阈值转换的二值化图像可能严重失真,所以我们大部分情况采用手动阈值。

灰度图:

二值化图像:

转载请注明出处:C#二值图像算法

本文链接:https://www.axdzc.com/blog/c2z

评论0

请先

1.即日起暂时取消网站QQ登录,之前用QQ登录的会员请联系客服绑定邮箱或改为密码登录。 2.交流社区已上线,会员如需交流请移动至交流社区发帖。
没有账号? 忘记密码?