【简单的CV】1.7 图像二值化

2019-11-06 13:50:56 浏览数 (1)

1.6 灰度图

01

二值化的图像

二值化图像是一种特殊的灰度度,它的像素只有两个值0或者1,这样一个像素点用一位(Bit)就可以表示。

二值化的图像像素值只有两个

二值化图像

02

彩色图片的二值化

首先将彩色图转为灰度图,再将灰度图转为二值图

由灰度转二值是一种常见的转变,可以通过一个简单的过滤函数来实现。

THR也就是我们设置阈值

03

二值过滤代码

代码语言:javascript复制
        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

利用二值化来发现对象轮廓

刚刚在遍历的时候,我们已经记录了没有被过滤的点的坐标。这些点,有的可能是长方形的边,有些可能是噪点。我们把这些点位置的像素用红色在原图上标出。

代码语言:javascript复制
        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. 二值化来计算轮廓

bit

0 人点赞