1.6 灰度图
01
二值化的图像
二值化图像是一种特殊的灰度度,它的像素只有两个值0或者1,这样一个像素点用一位(Bit)就可以表示。
二值化的图像像素值只有两个
二值化图像
02
彩色图片的二值化
首先将彩色图转为灰度图,再将灰度图转为二值图
由灰度转二值是一种常见的转变,可以通过一个简单的过滤函数来实现。
THR也就是我们设置阈值
03
二值过滤代码
public static Bitmap Matboolcal( Bitmap bitmap,int thr1,int thr2)
{
points.Clear();
Bitmap bitmap_dst = new Bitmap(bitmap.Width, bitmap.Height);
if (true)
{
for (int hl = 0; hl < bitmap.Height; hl++)//遍历所有列
{
for (int wl = 0; wl < bitmap.Width;wl++)//遍历所有列
{
if (bitmap.GetPixel(wl, hl).R <thr1)
{
bitmap_dst.SetPixel(wl, hl, Color.FromArgb(0, 0, 0));
Point point = new Point(); point.X = wl; point.Y = hl;
points.Add(point);//记录这些点
}
else
{
bitmap_dst.SetPixel(wl, hl, Color.FromArgb(255,255,255));
}
}
}
}
return bitmap_dst;
}
04
利用二值化来发现对象轮廓
刚刚在遍历的时候,我们已经记录了没有被过滤的点的坐标。这些点,有的可能是长方形的边,有些可能是噪点。我们把这些点位置的像素用红色在原图上标出。
private void matFindCounterToolStripMenuItem_Click(object sender, EventArgs e)
{
foreach (PointF item in ESCV.points)
{
scbitmap.SetPixel((int)item.X, (int)item.Y, Color.Red);
}
pictureBox1.Image = scbitmap;
}
小结
1. 二值化的算法
2. 二值化来计算轮廓