17.3.1.5 二值化(黑白)

版权声明:本文为博主原创文章,转载请在显著位置标明本文出处以及作者网名,未经作者允许不得用于商业目的。

二值化的算法主要有以下两种:

1、彩色图像灰度化后,根据灰度和阈值来确定颜色是黑色还是白色。通常情况下使用的阈值是128。

2、第一种算法选择128作为阈值,在实际使用中显示效果并不是很好,可以采用更常见的求阈值的方法,例如大律法等。

【例 17.38二值化算法一。

       //黑白1
        private void btn2Color1_Click(object sender, EventArgs e)
        {
            Color pSourceColor;
            Color pDestColor;

            Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);
            int R, G, B;
            int AvgColor;
            for (int i = 0; i < sourceImg.Width; i++)
            {
                for (int j = 0; j < sourceImg.Height; j++)
                {
                    pSourceColor = sourceImg.GetPixel(i, j);
                    R = pSourceColor.R;
                    G = pSourceColor.G;
                    B = pSourceColor.B;
                    AvgColor = (R + G + B) / 3;
                    if (AvgColor >= 128)
                        AvgColor = 255;
                    else
                        AvgColor = 0;
                    pDestColor = Color.FromArgb(AvgColor, AvgColor, AvgColor);
                    destImg.SetPixel(i, j, pDestColor);
                }
            }
            picDest.Image = destImg;
        }

运行结果如下图所示:

图17-42 二值化处理一

【例 17.39二值化算法二。

      //黑白2
        private void btn2Color2_Click(object sender, EventArgs e)
        {
            Color pSourceColor;
            Color pDestColor;

            Bitmap destImg = new Bitmap(sourceImg.Width, sourceImg.Height);
            int R, G, B;
            int[] HistGram = new int[256];

            for (int i = 0; i < sourceImg.Width; i++)
            {
                for (int j = 0; j < sourceImg.Height; j++)
                {
                    pSourceColor = sourceImg.GetPixel(i, j);
                    HistGram[pSourceColor.R] += 1;
                }
            }

            int threshold;

            int allSum = 0;
            int allCount=0;
            for(int k = 0;k<= 255;k++)
            {
                allCount += HistGram[k];
                allSum += k * HistGram[k];
            }

            threshold = allSum / allCount;

            for (int i = 0; i < sourceImg.Width; i++)
            {
                for (int j = 0; j < sourceImg.Height; j++)
                {
                    pSourceColor = sourceImg.GetPixel(i, j);
                    R = pSourceColor.R;

                    if (R >= threshold)
                        R = 255;
                    else
                        R = 0;
                    pDestColor = Color.FromArgb(R, R, R);
                    destImg.SetPixel(i, j, pDestColor);
                }
            }
            picDest.Image = destImg;
        }

运行结果如下图所示:

图17-43 二值化处理二

学习更多vb.net知识,请参看vb.net 教程 目录

学习更多C#知识,请参看 C# 教程 目录

相关推荐

  1. OpenCV图像

    2024-02-18 13:46:02       36 阅读
  2. OpenCV图像阈值分割、

    2024-02-18 13:46:02       37 阅读
  3. 【图像处理】-1.图像

    2024-02-18 13:46:02       38 阅读
  4. 灰度、边缘检测、轮廓检测

    2024-02-18 13:46:02       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-02-18 13:46:02       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-02-18 13:46:02       101 阅读
  3. 在Django里面运行非项目文件

    2024-02-18 13:46:02       82 阅读
  4. Python语言-面向对象

    2024-02-18 13:46:02       91 阅读

热门阅读

  1. 【leetcode题解C++】455.分发饼干 and 376.摆动序列

    2024-02-18 13:46:02       58 阅读
  2. react中commit工作流程

    2024-02-18 13:46:02       52 阅读
  3. 【编程】Rust语言入门第4篇 字符串

    2024-02-18 13:46:02       51 阅读
  4. React中hooks使用限制及保存函数组件状态

    2024-02-18 13:46:02       49 阅读
  5. Rust 学习笔记 - 流程控制 与 Range 类型

    2024-02-18 13:46:02       53 阅读
  6. AWS认证SAA-C03每日一题

    2024-02-18 13:46:02       42 阅读
  7. https 为什么安全

    2024-02-18 13:46:02       58 阅读